The translation of machine code into a human readable assembly code, also the result of such translation.
Disassembly refers to the translation of machine code into assembly code, that is a mnemonic form of the underlying machine code. The code generated from a disassembler is usually human readable and not formatted for input to an assembler. Unlike decompilation, disassembly operates on much lower-level languages.
Disassembling is not an exact science, so it is possible for a single program to have two or more reasonable representations in disassembly. Determining which instructions would actually be encountered during a run of the program reduces to the halting problem, which is currently proven to be unsolvable. Additionally it is a challenge to distinguish code from data during a disassembler run, which can be countered using heuristics in many cases and requires human interaction in other cases.
From Wikipedia on the 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.
Disassemblers
More can be found in the tools tag-wiki.
distorm
From the website:
diStorm is a lightweight, easy-to-use and fast decomposer library.
diStorm disassembles instructions in 16, 32 and 64 bit modes. Supported instruction sets: FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow! (w/ extensions), new x86-64 instruction sets, VMX, AMD's SVM and AVX!
IDA
From the website:
IDA is a Windows, Linux or Mac OS X hosted multi-processor disassembler and debugger that offers so many features it is hard to describe them all. Just grab an evaluation version if you want a test drive.
An executive summary is provided for the non-technical user.