Skip to content

Commit

Permalink
== Version 0.9.0.0 ==
Browse files Browse the repository at this point in the history
The main feature of this release is the long-awaited reworking of the analysis phase of the Reko decompiler. The slow and inaccurate interprocedural register liveness analysis was replaced by a novel analysis based on the strongly connected components (SCC's) of the call graph. The SCC's, which most of the time consist of a single procedure, are converted to SSA form earlier now.

In addition the classic Cytron et. al SSA construction algorithm, which requires the eager calculation of the immediate dominator relation of the basic blocks in the procedures, was replaced with a simpler S algorithm described in "Simple and Efficient Construction of Static Single Assignment Form" by Matthias Braun et al. The SSA algorithm has been augmented to perform lazy register / stack variable alias analysis, which turned out to be more efficient than the old register alias analysis phase.

The handling of 'hell nodes' has received focused attention. Hell nodes are indirect calls without associated function type metadata. Previously Reko was pessimistically assuming the worst: that all registers are live in and live out. Several heuristics have been applied to 'tame' the hell nodes to make the resulting output manageable (with many thanks to @ptomin).

Many other improvements to the data flow analysis were incorporated in this release as well. The results are improved source file outputs.

Initial support was added for the following CPU architectures:
* Blackfin
* Cray YMP
* OpenRISC
* MicroBlaze
* PA-RISC
* RL-78

Progress is hampered by the lack of good sample binaries with which to train the decompiler. Please contact us if you have any such binaries available.

Changes were also made in the output folder structure, and binary resources (like embedded icons and menus) are now extracted. (with thanks to @Cairn23)

Thanks to @Cairn23 and @gbody for their contributions. Special thanks go again to @ptomin and @smx-smx for their code, time, and dedication.
  • Loading branch information
uxmal committed Nov 8, 2019
1 parent 118270a commit 7795cf9
Show file tree
Hide file tree
Showing 180 changed files with 196 additions and 191 deletions.
2 changes: 1 addition & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: 0.8.1.{build}
version: 0.9.0.{build}

init:
- git config --global core.autocrlf true
Expand Down
4 changes: 2 additions & 2 deletions src/Core/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ namespace Reko
{
public static class AssemblyMetadata
{
public const string AssemblyVersion = "0.8.2.0";
public const string AssemblyFileVersion = "0.8.2.0";
public const string AssemblyVersion = "0.9.0.0";
public const string AssemblyFileVersion = "0.9.0.0";
public const string Product = "Reko decompiler";
public const string Copyright = "Copyright © 1999-2019 John Källén";
public const string Company = "John Källén Konsult AB";
Expand Down
3 changes: 1 addition & 2 deletions src/Decompiler/Analysis/SsaTransform.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@
namespace Reko.Analysis
{
/// <summary>
/// Transforms a <see cref="Reko.Core.Procedure"/> to Static Single Assignment
/// form.
/// Transforms a <see cref="Reko.Core.Procedure"/> to Static Single Assignment form.
/// </summary>
/// <remarks>
/// This class implements an SSA algorithm that does not require the
Expand Down
6 changes: 3 additions & 3 deletions src/WixInstaller/Properties.wxi
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@
<Include>
<!-- Every time you change the RekoVersion, you must also update
the RekoProductCode below -->
<?define RekoVersion="0.8.2.0"?>
<?define RekoVersion="0.9.0.0"?>

<!-- Platform specific properties -->
<?if $(var.Platform) = x64 ?>
<?define ProductName="Reko decompiler for x86-64" ?>
<?define IsWin64="yes"?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define UpgradeCode="11756789-4124-498B-8866-7F29B60F3389"?>
<?define RekoProductCode="52FDF2D9-39FF-4085-A21F-408FE6156DA9"?>
<?define RekoProductCode="31C74DDC-7FC7-4B6C-9845-8934BDE95E40"?>
<?else ?>
<?define ProductName="Reko decompiler for x86" ?>
<?define IsWin64="no"?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define UpgradeCode="267A75B3-F33E-4987-9BF6-114D1A6CE44E"?>
<?define RekoProductCode="AE3446D7-FBC9-40B2-B4BA-DEBD56D3FA8A"?>
<?define RekoProductCode="B4360F1A-E38F-45E4-9376-17224F7DD39E"?>
<?endif ?>
</Include>
2 changes: 1 addition & 1 deletion src/WixInstaller/WixInstaller.wixproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<ProductVersion>3.7</ProductVersion>
<ProjectGuid>b1916638-ef20-4692-8c95-1c5ad6c67d30</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>reko-0.8.2.0-%24%28Platform%29</OutputName>
<OutputName>reko-0.9.0.0</OutputName>
<OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
Expand Down
4 changes: 2 additions & 2 deletions src/tools/makesigs/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.8.2.0")]
[assembly: AssemblyFileVersion("0.8.2.0")]
[assembly: AssemblyVersion("0.9.0.0")]
[assembly: AssemblyFileVersion("0.9.0.0")]
4 changes: 2 additions & 2 deletions src/tools/xslt/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:

[assembly: AssemblyVersion("0.8.2.0")]
[assembly: AssemblyFileVersion("0.8.2.0")]
[assembly: AssemblyVersion("0.9.0.0")]
[assembly: AssemblyFileVersion("0.9.0.0")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
2 changes: 1 addition & 1 deletion subjects/CPM-80/CB80.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// CB80.c
// Generated by decompiling CB80.COM
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "CB80.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/CPM-80/CB80.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// CB80.globals.c
// Generated by decompiling CB80.COM
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "CB80.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/CPM-80/CB80.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// CB80.h
// Generated by decompiling CB80.COM
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/ARM/angr-685/RTOSDemo.reko/RTOSDemo.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RTOSDemo.c
// Generated by decompiling RTOSDemo.axf
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "RTOSDemo.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/ARM/angr-685/RTOSDemo.reko/RTOSDemo.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RTOSDemo.globals.c
// Generated by decompiling RTOSDemo.axf
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "RTOSDemo.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/ARM/angr-685/RTOSDemo.reko/RTOSDemo.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// RTOSDemo.h
// Generated by decompiling RTOSDemo.axf
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/ARM/switch/switch.reko/switch.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// switch.c
// Generated by decompiling switch
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "switch.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/ARM/switch/switch.reko/switch.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// switch.globals.c
// Generated by decompiling switch
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "switch.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/ARM/switch/switch.reko/switch.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// switch.h
// Generated by decompiling switch
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/MIPS/redir/redir.reko/redir.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// redir.c
// Generated by decompiling redir
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "redir.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/MIPS/redir/redir.reko/redir.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// redir.globals.c
// Generated by decompiling redir
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "redir.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/MIPS/redir/redir.reko/redir.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// redir.h
// Generated by decompiling redir
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/MIPS/swlswr/test.reko/test.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// test.c
// Generated by decompiling test
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "test.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/MIPS/swlswr/test.reko/test.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// test.globals.c
// Generated by decompiling test
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "test.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/MIPS/swlswr/test.reko/test.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// test.h
// Generated by decompiling test
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/Msp430/a.reko/a.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// a.c
// Generated by decompiling a.out
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "a.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/Msp430/a.reko/a.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// a.globals.c
// Generated by decompiling a.out
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "a.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/Msp430/a.reko/a.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// a.h
// Generated by decompiling a.out
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/RiscV/ipcalc/ipcalc.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ipcalc.c
// Generated by decompiling ipcalc
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "ipcalc.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/RiscV/ipcalc/ipcalc.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ipcalc.globals.c
// Generated by decompiling ipcalc
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "ipcalc.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/RiscV/ipcalc/ipcalc.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ipcalc.h
// Generated by decompiling ipcalc
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/Sparc/from_boomerang/subject.reko/subject.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// subject.c
// Generated by decompiling subject.exe
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "subject.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// subject.globals.c
// Generated by decompiling subject.exe
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "subject.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/Sparc/from_boomerang/subject.reko/subject.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// subject.h
// Generated by decompiling subject.exe
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// sparc-rtems-unprotoize.c
// Generated by decompiling sparc-rtems-unprotoize
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "sparc-rtems-unprotoize.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// sparc-rtems-unprotoize.globals.c
// Generated by decompiling sparc-rtems-unprotoize
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "sparc-rtems-unprotoize.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// sparc-rtems-unprotoize.h
// Generated by decompiling sparc-rtems-unprotoize
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/nanoMips/adddf3/adddf3.reko/adddf3.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// adddf3.c
// Generated by decompiling adddf3.o
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "adddf3.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/nanoMips/adddf3/adddf3.reko/adddf3.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// adddf3.globals.c
// Generated by decompiling adddf3.o
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "adddf3.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/nanoMips/adddf3/adddf3.reko/adddf3.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// adddf3.h
// Generated by decompiling adddf3.o
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ais3_crackme.c
// Generated by decompiling ais3_crackme
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "ais3_crackme.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ais3_crackme.globals.c
// Generated by decompiling ais3_crackme
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "ais3_crackme.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ais3_crackme.h
// Generated by decompiling ais3_crackme
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/x86-64/ls/ls.reko/ls.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ls.c
// Generated by decompiling ls
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "ls.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/x86-64/ls/ls.reko/ls.globals.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ls.globals.c
// Generated by decompiling ls
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "ls.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/x86-64/ls/ls.reko/ls.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ls.h
// Generated by decompiling ls
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/x86-64/pngpixel/pngpixel.reko/pngpixel.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// pngpixel.c
// Generated by decompiling pngpixel
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "pngpixel.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// pngpixel.globals.c
// Generated by decompiling pngpixel
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "pngpixel.h"

Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/x86-64/pngpixel/pngpixel.reko/pngpixel.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// pngpixel.h
// Generated by decompiling pngpixel
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

/*
// Equivalence classes ////////////
Expand Down
2 changes: 1 addition & 1 deletion subjects/Elf/x86-64/retpoline/retpoline.reko/retpoline.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// retpoline.c
// Generated by decompiling retpoline.elf
// using Reko decompiler version 0.8.2.0.
// using Reko decompiler version 0.9.0.0.

#include "retpoline.h"

Expand Down
Loading

0 comments on commit 7795cf9

Please sign in to comment.