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 , 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 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.