This Reko release contains a variety of new features and improvements.
New contributor @gregoral made huge improvements to Reko's Risc-V support:
added decoders and rewriters for many new Risc-V instructions both unprivileged
and privileged, fixed many bugs in existing instruction decoders, and provided
a new instruction renderer for the architecture. Reko's Risc-V disassembly output
can now be assembled by other toolchains -- it's round-trippable.
Contributor @throwaway96 continued improving support for the mysterious
AEON architecture, and various enhancements in the Reko implementation of the
C preprocessor. Now there is a #define
symbol __REKO_DECOMPILER__
that is
set to 1 when parsing C header files with Reko.
Progress on the platform-indepentent Avalonia GUI is slow but continuous.
The project was moved to Avalonia 11 from the previous 0.10 verson. A major
milestone was reached when the MemoryControl
and TextView
classes were finally ported to Avalonia.
The only remaining custom controls remaining, the VisualizerView
and the ImageMapView
controls, are scheduled to be completed in the coming weeks. The Avalonia user interface
is soon going to reach feature parity with the Windows Forms interface.
Contributor @ptomin continued improving Reko's type inference engine. We are
reaching a point where limitations in the general strategy of Reko's type inference
are hindering progress. An alterative type analysis, based on subtype constraints, is
being researched.
Contributor @smx-smx labored on the build system with various performance
improvements and bug fixes in preparation for support of .NET 8
Some other changes:
- Reko now reads PE executables looking for the PE debug directory.
- Very rudimentary PDB reading support is present. It's a starting point
for extracting symbolic information from binaries with associated PDB
files. - Fixes to the WASM rewriter.
- Much improved support for COFF and OMF file formats
- All known CR16c instructions now supported.
- All known AVR32 instructions now supported.
- Support for distingushing 16- and 20-bit MSP 430 instruction sets.
- Added support for C-Sky architecture.
- Stub implementations of Zilog Z8000 and eZ8 architectures.
- Corrected behavior for Sparc SAVE/RESTORE instructions.
- Introduced a new
IMemory
abstraction that hides the details
of segmentations. New code is expected to using this new interface rather
than manually looking up addresses inSegmentMap
. - Added support for Architecture aliases. For instance, the X86 architecture can
be referred to asi386
orx86
. - Support for the PalmOS platform, including handling A-line trap calls
on that platform and MacsBug symbol support. - New packing script for LzExe 0.91, written wholly in OllyScript and using Reko'scheduled
X86 emulation. - Handle '*' in
*printf
format strings. - Introduced
IFunctionalUnit
abstraction to handle SIMD instructions in a
coherent way.
Thanks to @gregoral, @ptomin, @smx-smx, and @throwaway96 for their contributions and dedication.