Disassembler

Disassembler

A disassembler is a computer program that translates machine language into assembly language—the inverse operation to that of an assembler. A disassembler differs from a decompiler, which targets a high-level language rather than an assembly language. Disassembly, the output of a disassembler, is often formatted for human-readability rather than suitability for input to an assembler, making it principally a reverse-engineering tool.

Assembly language source code generally permits the use of constants and programmer comments. These are usually removed from the assembled machine code by the assembler. If so, a disassembler operating on the machine code would produce disassembly lacking these constants and comments; the disassembled output becomes more difficult for a human to interpret than the original annotated source code. Some disassemblers make use of the symbolic debugging information present in object files such as ELF. The Interactive Disassembler allow the human user to make up mnemonic symbols for values or regions of code in an interactive session: human insight applied to the disassembly process often parallels human creativity in the code writing process.

Disassembly is not an exact science: on CISC platforms with variable-width instructions, or in the presence of self-modifying code, it is possible for a single program to have two or more reasonable disassemblies. Determining which instructions would actually be encountered during a run of the program reduces to the proven-unsolvable halting problem.

Contents

Problems of disassembly

Writing a disassembler which produces code which, when assembled, produces exactly the same binary, is non-trivial; there are often differences. However, even when a totally correct disassembly is produced, problems remain if the program is to be modified. For example, the same machine language jump instruction can be generated by assembly code which jumps to a specified location (for example, to execute specific code), or which jumps by a specified number of bytes (for example, to skip over an unwanted branch). A disassembler cannot know what is intended, and may use either syntax, generating a disassembly which reproduces the original binary. However, if a programmer wants to add instructions between the jump instruction and its destination, it is necessary to understand the program's operation to determine whether the jump should be absolute or relative, i.e., whether its destination should remain at a fixed location, or be moved so as to skip both the original and added instructions.

Examples of disassemblers

A disassembler may be stand-alone or interactive. A stand-alone disassembler, when executed, generates an assembly language file which can be examined; an interactive one shows the effect of any change the user makes immediately. For example, the disassembler may initially not know that a section of the program is actually code, and treat it as data; if the user specifies that it is code, the resulting disassembled code is shown immediately, allowing the user to examine it and take further action during the same run.

Any interactive debugger will include some way of viewing the disassembly of the program being debugged. Often, the same disassembly tool will be packaged as a standalone disassembler distributed along with the debugger. For example, objdump, part of GNU Binutils, is related to the interactive debugger gdb.

  • IDA
  • OllyDbg is a 32-bit assembler level analysing debugger
  • OLIVER and SIMON include disassemblers for Assembler, COBOL, and PL/1

See also

References

  • L. Vinciguerra, L. Wills, N. Kejriwal, P. Martino, and R. Vinciguerra, "An Experimentation Framework for Evaluating Disassembly and Decompilation Tools for C++ and Java", Proc. of 10th Working Conference on Reverse Engineering (WCRE) 2003.
  • B. Schwarz, S. Debray, and G. Andrews, "Disassembly of Executable Code Revisited", Proc. of 9th Working Conference on Reverse Engineering (WCRE), pp. 45–54, 2002.

External links


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Look at other dictionaries:

  • Disassembler —   [dt. »Auseinandernehmer«] der, (Reassembler), ein Programm, mit dem sich aus einem ausführbaren Programm (also einem Maschinencode) ein Code in Assemblersprache gewinnen lässt. Der Disassembler ist damit das Gegenstück eines Assemblers. Die… …   Universal-Lexikon

  • disassembler — dis as*sem bler n. (Computers) a computer program that takes as input a computer program in machine language and produces an equivalent assembly language file. [PJC] …   The Collaborative International Dictionary of English

  • disassembler —  Disassembler  Дизассемблер   В молекулярных нанотехнологиях наномашина или система наномашин, способная разбирать предмет, записывая на каждой стадии разборки информацию о конструкции и составе этого предмета на молекулярном уровне …   Толковый англо-русский словарь по нанотехнологии. - М.

  • Disassembler — Ein Disassembler ist ein Computerprogramm, das die binär kodierte Maschinensprache eines ausführbaren Programmes in eine für Menschen lesbarere Assemblersprache umwandelt. Er ist also ein spezieller Übersetzer, der den umgekehrten Arbeitsvorgang… …   Deutsch Wikipedia

  • disassembler — UK [ˌdɪsəˈsemblə(r)] / US [ˌdɪsəˈsemblər] noun [countable] Word forms disassembler : singular disassembler plural disassemblers computing a piece of software that changes machine language back into assembly language …   English dictionary

  • disassembler — noun A computer program that examines another computer program and attempts to generate assembly language source code that would, in theory, reproduce the target program. <!CORRECT, BUT ENCYCLOPEDIC: In practice, the output of a disassembler… …   Wiktionary

  • disassembler — deasembleris statusas T sritis informatika apibrėžtis Programa, kompiuterinį programos kodą paverčianti į ↑asembleriu pavaizduotą programą. Pavertimas gali būti nevienareikšmis – deasembleriu gauta programa gali nesutapti su originalia programa,… …   Enciklopedinis kompiuterijos žodynas

  • Disassembler (artist) — Disassembler Disassembler circa 2007 Background information Birth name William Collier Born February 28, 1985 …   Wikipedia

  • Disassembler — Dis|as|sem|bler* [ disəsɛmblə] der; s, <zu ↑dis... u. ↑Assembler> Programm (4), das ein Maschinenprogramm in ein Assemblerprogramm umsetzt (EDV) …   Das große Fremdwörterbuch

  • disassembler — disassemˈbler noun (computing) A program that translates from machine code to an assembly language • • • Main Entry: ↑disassemble …   Useful english dictionary

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”