Decompilation
|
Decompilation is the process of translating an executable program into high level source code using a decompiler. This is the inverse process to a compiler, but a general decompiler will not attempt to exactly reverse the translation steps of the particular compiler used.
Decompilation is similar to disassembly, but while disassembly translates executable code into assembly language source code, decompilation translates the same executable code to high-level language source code. There is some art to finding a single line of high-level language that best represents the equivalent block of machine code.
Decompilation of programs compiled for a virtual machine (e.g. Java byte-codes) is generally much more successful than decompilation from machine code, because of the extra information contained in virtual machine binary file formats.
Results can be improved if the decompiler has the entry points of the libraries and DLLs. It should also have an editable symbol table to help the decompiler to document its output.