Decompilation is the process of reversing a previous compilation back into its component parts. In software, a program is often constructed by compilation of its parts with built-in library parts.

Decompilation is similar to disassembly, but while disassembly reverses machine code into assembly language source code, decompilation takes machine code and turns it back into high-level language source code. This requires a bit of art to find that single line of high-level language that best represents the equivalent block of machine code.

Results can be improved if the decompiler has the entrance points of the libraries and DLLs. It should also have an editable symbol table to help the decompiler to document its output.