related topics
{math, number, function}
{system, computer, user}
{theory, work, human}
{mi², represent, 1st}

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.


Examples of disassemblers

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
  • ILDASM is a tool contained in the .NET Framework SDK. It can be used to disassemble PE files containing Common Intermediate Language code.
  • OllyDbg is a 32-bit assembler level analysing debugger
  • SIMON, a test/debugger/animator with integrated dis-assembler for Assembler, COBOL and PL/1
  • Texe -- is a Free, 32bit disassembler and windows PE file analyzer.
  • unPIC is a disassembler for PIC microcontrollers

Full article ▸

related documents
IBM Business System 12
Lint (software)
Data element
Uniform Resource Locator
Denormal number
Common Language Infrastructure
Metcalfe's law
Z notation
List of Fourier-related transforms
Lazy initialization
Derivative of a constant
Direct sum of groups
Sigmoid function
Essential singularity
Greibach normal form
Hilbert's Nullstellensatz
Constant folding
Linearity of integration
Discrete mathematics
Recursive language
Online algorithm
Euler's theorem
Group object
Dining cryptographers protocol