News from 200530/Dec/05: A binary relase of Boomerang alpha 0.2 is ready for download. Two Linux versions are available; one for modern Linux distros using libstdc++.so.6, and one for older distros still using libstdc++.so.5. Both require libc.so.6. There is also a console Win32 version, now built with Microsoft Visual Studio 2003, resulting in a smaller download.
7/Dec/05: After 3 years, the most fundamental part of Boomerang, the propagation system, has been significantly reworked. Instead of propagating in stages based on the memory depth of an expression, now all expressions are propagatable, but initially only those memory expressions whose address expressions are "primitive" are eligible for SSA renaming (and hence for propagation). A side effect of this (not fundamental to this change, just part of the cleanup) is that decompiles are noticably faster. I suspect that Boomerang spent a lot of its time redoing propagations needlessly, limited only by the 20 iteration limit, because the logic for detecting changes was not working correctly. No doubt there will be some tweaking over the next few weeks, but already more of the functional tests are working than has been the case for the last many months.
15/Nov/05: The less than satisfactory heuristic for limiting propagation has been replaced with a hopefully more satisfactory heuristic. Now, propagations are prevented if propagation would be to more than one use, and the complexity is greater than a command line (-l) threshold. Complexity is meaured basically as the number of operators (binary, ternary, most unary but not locations except for memOf). The default threshold is 3 (equivalent to -l 3). Common Subexpression Elimination was actually attempted, but that undid basically all the propagation.
22/Sep/05: Boomerang's license is about to change from BSD-like to combined BSD-like and GPL'd. See the license page for details.
13/Sep/05: You can make Boomerang with Visual Studio .NET 2002 now. See the making page for details.
31/Aug/05: There is early support for Mac OS X as a host (i.e. the ability to run the Boomerang decompiler from OS X). As part of getting this working, there are now some calls to GC_MALLOC_UNCOLLECTABLE to establish some static global roots for safe garbage collection. While this seems to be necessary for the OS X platform, I suspect it will help with some mysterious behaviour on other platforms as well. Boomerang should build on Mac OS X Version 10.2 or later (not 10.1). At this stage, it is necessary to create a soft link to the lib/ directory in the immediate parent directory above the main Boomerang directory (e.g. cd ..;ln -s boomerang/lib .;cd - ). (Help on how to specify the library runtime directory correctly is welcome as usual).
06/Jul/05: There was a large merge from a CVS branch to replace the implicit parameters with Collectors. The Windows version is fixed now, as well as "make test". The "stattest" test fails when using ad-hoc type analysis because of an ordering problem. I intend to improve type analysis soon; when it's working well enough the ad-hoc TA code will be removed and this won't be an issue. The ad-hoc TA is really only kept for regression testing now. Control flow restart after analysing indirect jumps has been implemented, as well as a host of other features such as better support for recursion. The older version may well stand up better on larger input programs (for a while); to get this version, request files as of the date 20050630.
11/Mar/05: There is an early ST-20 (C4) front end now, thanks to Dr. Aus. To use it, objcopy your ST-20 code into ELF format, and patch the processor byte (offset 0x12) to 0xA8. This is not an official code for the ST-20; there doesn't seem to be one defined as yet. You may need -Td to get the local variables to be recognised.
11/Feb/05: Added the Boomerang Terminology page.
10/Feb/05: You can browse preliminary doxygen generated documentation for the Boomerang class here. Not all the links are working yet.
31/Jan/05: There is a front end for the PowerPC machine now. It is still incomplete, but already the hello and twoproc tests are part of the (Linux) functional test (functest.sh). Supported instructions include load and store (including floating point and multi-word), arithmetic and logical, compare and branch, call and return, and some floating point operations. There is support for the unusual multiple flags feature of the Power PC architecture.
There is also a Mach-O loader, with extra support for some of the rich information inherent in Objective-C binary files. So Boomerang can now read Linux/PPC and most (new) Macinosh executable binary files. If someone would like to write a PEF loader (for Mac OS 9 files) we would love to hear from you.