A decompiler takes as input an executable file, and attempts to create a high level, compilable, possibly even maintainable source file that does the same thing.

It is therefore the opposite of a compiler, which takes a source file and makes an executable. However, a general decompiler does not attempt to reverse every action of the decompiler, rather it transforms the input program repeatedly until the result is high level source code. It therefore won't recreate the original source file; probably nothing like it.

It does not matter if the executable file has symbols or not, or was compiled from any particular language. (However, declarative languages like ML are not considered.)

The intent is to create a retargetable decompiler (i.e. one that can decompile different types of machine code files with modest effort, e.g. X86-windows, sparc-solaris, etc). It was also intended to be highly modular, so that different parts of the decompiler can be replaced with experimental modules. It was intended to eventually become interactive, a la IDA Pro, because some things (not just variable names and comments, though these are obviously very important) require expert intervention. Whether the interactivity belongs in the decompiler or in a separate tool remains unclear.

By transforming the semantics of individual instructions, and using powerful techniques such as Static Single Assignment dataflow analysis, Boomerang should be (largely) independent of the exact behaviour of the compiler that happened to be used. Optimisation should not affect the results. Hence, the goal is a general decompiler.

Limitations:
In case you want to try Boomerang as it is as a decompiler (as opposed to experimenting with it, or improving it), be aware of its severe limitations. As of early 2004, Boomerang will only decompile X86 (Linux/X86 or Windows PE), SPARC (Solaris, or presumably Linux/SPARC), or Power PC (Linux/PPC or Mac OS/X) programs. In particular, note that it will not decompile DOS or NE (Windows 3.1) programs. Adding another processor is a large (several month) undertaking.

It will only generate C, not C++. It will decompile C++ programs of course, (and any sorts of programs, including assembler). You may be able to hand edit some C++ programs into usable C++ source code. For MSVC compiled programs, at present you have to spoonfeed the decompiler and tell it that there is one register parameter (thiscall calling convention). The switches to handle this are complex; see using the -sf switch.