Skip to content

Version 0.9.2

Compare
Choose a tag to compare
@uxmal uxmal released this 02 Oct 10:26
· 2560 commits to master since this release

This release of Reko is dedicated to the memory of contributor Christian Hostelet, who passed away this year. He extended Reko with support for MicroChip PIC and was instrumental in implementing support for specifying processor models in the Reko GUI.

This release is the first one that publishes the Reko runtime components (architectures, image loaders, platforms etc) as a separate NuGet package, available at https://www.nuget.org/packages/Reko.Decompiler.Runtime. Programmers can now use the Reko toolchain in their own projects to load files. One implication of publishing a NuGet is that semantic versioning needs to be observed (https://semver.org/). Since Reko is still very much a work in progress, this doesn't impact the project heavily yet. However, now that external projects have dependencies on Reko, we will try to make their maintainers' lives easier by being scrupulous about version numbers.

The OllyScript interpreter was refactored and extended to support X86 segmented addresses. This makes it possible for Reko to use a simple OllyScript to unpack binaries, rather than having to hand-write unpackers in C#. The X86 emulator was also augmented to support segmented addresses. The PK-Lite MS-DOS EXE unpacker uses an OllyScript file to accomplish its task.

Internally, a new Convert expression was introduced to remove the amiguity inherent in the Cast expression. The latter assumes the types of the cast expression is known, which in decompilation is not always true. Convert explicitly states what type is being converted from and what type is converted to. Adoption of Convert resulted in many code improvements, especially around handling of floating-point literal values.

The rendering of global variables is now much improved (with thanks to @ptomin).

For developers, the new ITestGenerationService supports the generation of unit tests when a machine instruction couldn't be decoded or rewritten. It generates a text file in the decompiler output directory, which users can submit in an error report.

The Reko intermediate language is moving toward becoming "round-trippable". The intent is to reach a point where Reko can read in IR in a persisted format (like text or binary) faithfully.

A special thank you to @rfalke, who reported many issues when running his decompiler testing project: https://github.com/rfalke/decompiler-subjects. The RekoSifter tool was used to discover many issues in the Reko disassemblers (with thanks to @smx-smx for his work).

  • Support for AVR32, 64-bit SPARC, 65816, Risc-V, Hitachi H8,
  • Support for the SNES, original Xbox plaforms
  • Support for the SREC, Xbox XBE image file formats
  • Support for MASM and NASM style disassembly (suggested by @tgiphil)
  • Support loading C64 PRG files (#928)
  • Implemented missing instruction decoders and rewriters for architectures with large instruction sets (ARM32, AArch64, X86)
  • Improved support for MachO binaries
  • Initial support for loading WASM files, still a work in progress.
  • The command line client has a progress indicator (suggested by @smx-smx)

Thanks to @blindmatrix, @ptomin, @rfalke, and @smx-smx for their time and contributions to Reko.

In memoriam - Christian Hostelet (1955-2020).