Decompiler
A decompiler is a 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 WhyDecompilation). 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.
A decompiler should not in general be used for "cracking" other programs, where this would contravene the copyright of the program. Cracking of programs is not only illegal but it rides on other's creative effort. Further discussion of legal and ethical issues can be found in the article on reverse engineering.
Further reading
The Boomerang Decompiler is an attempt at a retargetable binary decompiler. It is presently capapable of decompiling small binary files (pentium and SPARC) to C. Boomerang is available under a BSD-like license, and can be run on various Unix and Windows platforms.
REC - Reverse Engineering Compiler by Giampiero Caprino.
REC is a portable reverse engineering compiler, or decompiler.
It reads an executable file, and attempts to produce a C-like representation of the code and data used to build the executable file. While source code is not available, binary distributions of REC for several platforms can be downloaded for free.
The DeCompilation Wiki discusses various aspects of decompilation: history, research, pattern matching, the general approach, Java decompilers (and why they work so much better than binary decompilers), and so on.
See also: assembler, disassembler, interpreter (computer software), linker, Abstract interpretation
|