| |||||||||
computer program that translates machine language or sometimes object code (the output from a compiler) into a high level language (source code). By comparison, a disassembler translates machine language into assembly language.
Decompilation is a technique for the recovery of lost source code. It is also useful in some cases for computer security, interoperability, error correction, and more (see ). Decompilation of Java bytecode programs is relatively easy, and there are many successful Java decompilers. Decompilation of binary programs is much harder; as a result there are very few binary decompilers, and they tend to fail (so far) on all but the smallest programs.
Discussion of legal and ethical issues of decompilation can be found in the article on reverse engineering.