GithubHelp home page GithubHelp logo

avast / retdec Goto Github PK

View Code? Open in Web Editor NEW
7.8K 238.0 931.0 31.78 MB

RetDec is a retargetable machine-code decompiler based on LLVM.

Home Page: https://retdec.com/

License: MIT License

CMake 0.70% Shell 0.06% C++ 74.04% Python 1.47% C 0.18% Makefile 0.01% Dockerfile 0.01% YARA 23.54%

retdec's Introduction

Warning

The RetDec project is currently in a limited maintenance mode due to a lack of resources:

  • Pull Requests are welcomed. They are reviewed with priority, if possible without delays.
  • Issues are reacted on with delays up to one quarter. Issues are not actively solved unless they relate to a basic project maintenance.
  • The basic project maintenance continues.
  • Only a very limited development is carried on.

RetDec

Travis CI build status TeamCity build status RetDec CI

RetDec is a retargetable machine-code decompiler based on LLVM.

The decompiler is not limited to any particular target architecture, operating system, or executable file format:

  • Supported file formats: ELF, PE, Mach-O, COFF, AR (archive), Intel HEX, and raw machine code
  • Supported architectures:
    • 32-bit: Intel x86, ARM, MIPS, PIC32, and PowerPC
    • 64-bit: x86-64, ARM64 (AArch64)

Features:

  • Static analysis of executable files with detailed information.
  • Compiler and packer detection.
  • Loading and instruction decoding.
  • Signature-based removal of statically linked library code.
  • Extraction and utilization of debugging information (DWARF, PDB).
  • Reconstruction of instruction idioms.
  • Detection and reconstruction of C++ class hierarchies (RTTI, vtables).
  • Demangling of symbols from C++ binaries (GCC, MSVC, Borland).
  • Reconstruction of functions, types, and high-level constructs.
  • Integrated disassembler.
  • Output in two high-level languages: C and a Python-like language.
  • Generation of call graphs, control-flow graphs, and various statistics.

For more information, check out our

Installation

There are two ways of obtaining and installing RetDec:

  1. Download and unpack a pre-built stable or bleeding-edge package and follow instructions in the Use section of its retdec/share/retdec/README.md file after unpacking.
  2. Build RetDec by yourself from sources by following the Build and Installation section. After installation, follow instructions below.

We currently support Windows (7 or later), Linux, macOS, and (experimentally) FreeBSD. An installed version of RetDec requires approximately 5 to 6 GB of free disk space.

Use

Please, ensure that you reading instructions corresponding to the used RetDec version. If unsure, refer to the retdec/share/retdec/README.md file in the installation.

Windows

  1. After installing RetDec, install Microsoft Visual C++ Redistributable for Visual Studio 2017.

  2. Install the following programs:

    • UPX (Optional: if you want to use UPX unpacker in the preprocessing stage)
    • Graphviz (Optional: if you want to generate call or control flow graphs)
  3. To decompile a binary file named test.exe, run

    $RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
    

    For more information, run retdec-decompiler.exe with --help.

Linux

  1. After installing RetDec, install the following packages via your distribution's package manager:

    • UPX (Optional: if you want to use UPX unpacker in the preprocessing stage)
    • Graphviz (Optional: if you want to generate call or control flow graphs)
  2. To decompile a binary file named test.exe, run

    $RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
    

    For more information, run retdec-decompiler with --help.

macOS

  1. After installing RetDec, install the following packages:

    • UPX (Optional: if you want to use UPX unpacker in the preprocessing stage)
    • Graphviz (Optional: if you want to generate call or control flow graphs)
  2. To decompile a binary file named test.exe, run

    $RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
    

    For more information, run retdec-decompiler with --help.

FreeBSD (Experimental)

  1. There are currently no pre-built "ports" packages for FreeBSD. You will have to build and install the decompiler by yourself. The process is described below.

  2. To decompile a binary file named test.exe, run

    $RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
    

    For more information, run retdec-decompiler with --help.

Use of RetDec libraries

You can easily use various RetDec libraries in your projects - if they are build with CMake. RetDec installation contains all the necessary headers, libraries, and CMake scripts.

If you installed RetDec into a standard installation location of your system (e.g. /usr, /usr/local), all you need to do in order to use its components is:

find_package(retdec 5.0 REQUIRED
   COMPONENTS
      <component>
      [...]
)
target_link_libraries(your-project
   PUBLIC
      retdec::<component>
      [...]
)

If you did not install RetDec somewhere where it can be automatically discovered, you need to help CMake find it before find_package() is used. There are generally two ways to do it (pick & use only one):

  1. Add the RetDec installation directory to CMAKE_PREFIX_PATH:

    list(APPEND CMAKE_PREFIX_PATH ${RETDEC_INSTALL_DIR})
  2. Set the path to installed RetDec CMake scripts to retdec_DIR:

    set(retdec_DIR ${RETDEC_INSTALL_DIR}/share/retdec/cmake)

See the Repository Overview wiki page for the list of available RetDec components, or the retdec-build-system-tests for demos on how to use them.

Build and Installation

This section describes a local build and installation of RetDec. Instructions for Docker are given in the next section.

Requirements

Linux

On Debian-based distributions (e.g. Ubuntu), the required packages can be installed with apt-get:

sudo apt-get install build-essential cmake git openssl libssl-dev python3 autoconf automake libtool pkg-config m4 zlib1g-dev upx doxygen graphviz

On RPM-based distributions (e.g. Fedora), the required packages can be installed with dnf:

sudo dnf install gcc gcc-c++ cmake make git openssl openssl-devel python3 autoconf automake libtool pkg-config m4 zlib-devel upx doxygen graphviz

On Arch Linux, the required packages can be installed with pacman:

sudo pacman --needed -S base-devel cmake git openssl python3 autoconf automake libtool pkg-config m4 zlib upx doxygen graphviz

Windows

  • Microsoft Visual C++ (version >= Visual Studio 2017 version 15.7)
  • CMake (version >= 3.6)
  • Git
  • OpenSSL (version >= 1.1.1)
  • Python (version >= 3.4)
  • Optional: Doxygen and Graphviz for generating API documentation

macOS

Packages should be preferably installed via Homebrew.

FreeBSD (Experimental)

Packages should be installed via FreeBSDs pre-compiled package repository using the pkg command or built from scratch using the ports database method.

  • Full "pkg" tool instructions: handbook pkg method
    • pkg install cmake python37 git autotools OR
  • Full "ports" instructions: handbook ports method
    • portsnap fetch
    • portsnap extract
  • For example, cmake would be
    • whereis cmake
    • cd /usr/ports/devel/cmake
    • make install clean

Process

Note: Although RetDec now supports a system-wide installation (#94), unless you use your distribution's package manager to install it, we recommend installing RetDec locally into a designated directory. The reason for this is that uninstallation will be easier as you will only need to remove a single directory. To perform a local installation, run cmake with the -DCMAKE_INSTALL_PREFIX=<path> parameter, where <path> is directory into which RetDec will be installed (e.g. $HOME/projects/retdec-install on Linux and macOS, and C:\projects\retdec-install on Windows).

  • Clone the repository:
    • git clone https://github.com/avast/retdec
  • Linux:
    • cd retdec
    • mkdir build && cd build
    • cmake .. -DCMAKE_INSTALL_PREFIX=<path>
    • make -jN (N is the number of processes to use for parallel build, typically number of cores + 1 gives fastest compilation time)
    • make install
  • Windows:
    • Open a command prompt (e.g. cmd.exe)
    • cd retdec
    • mkdir build && cd build
    • cmake .. -DCMAKE_INSTALL_PREFIX=<path> -G<generator>
    • cmake --build . --config Release -- -m
    • cmake --build . --config Release --target install
    • Alternatively, you can open retdec.sln generated by cmake in Visual Studio IDE
  • macOS:
    • cd retdec
    • mkdir build && cd build
    • cmake .. -DCMAKE_INSTALL_PREFIX=<path>
    • make -jN (N is the number of processes to use for parallel build, typically number of cores + 1 gives fastest compilation time)
    • make install
  • FreeBSD:
    • sudo pkg install git cmake
    • git clone https://github.com/avast/retdec
    • cd retdec
    • mkdir build && cd build
    • # FreeBSD (and other BSDs) do need cmake, python3, git, autotools. OpenSSL is pre-installed in the OS but check its version.
      # Later versions may be available for each of the packages.
      # See what is installed:
      sudo pkg info cmake python37 autotools
      # Install/upgrade them:
      sudo pkg install cmake python37 autotools
    • cmake .. -DCMAKE_INSTALL_PREFIX=<path>
    • make -jN (N is the number of processes to use for parallel build, typically number of cores + 1 gives fastest compilation time)
    • make install

You have to pass the following parameters to cmake:

  • -DCMAKE_INSTALL_PREFIX=<path> to set the installation path to <path>. Quote the path if you are using backslashes on Windows (e.g. -DCMAKE_INSTALL_PREFIX="C:\retdec").
  • (Windows only) -G<generator> is -G"Visual Studio 15 2017" for 32-bit build using Visual Studio 2017, or -G"Visual Studio 15 2017 Win64" for 64-bit build using Visual Studio 2017. Later versions of Visual Studio may be used.

You can pass the following additional parameters to cmake:

  • -DRETDEC_DOC=ON to build with API documentation (requires Doxygen and Graphviz, disabled by default).
  • -DRETDEC_TESTS=ON to build with tests (disabled by default).
  • -DRETDEC_DEV_TOOLS=ON to build with development tools (disabled by default).
  • -DRETDEC_COMPILE_YARA=OFF to disable YARA rules compilation at installation step (enabled by default).
  • -DCMAKE_BUILD_TYPE=Debug to build with debugging information, which is useful during development. By default, the project is built in the Release mode. This has no effect on Windows, but the same thing can be achieved by running cmake --build . with the --config Debug parameter.
  • -D<dep>_LOCAL_DIR=<path> where <dep> is from {CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD} (e.g. -DCAPSTONE_LOCAL_DIR=<path>), to use the local repository clone at <path> for RetDec dependency instead of downloading a fresh copy at build time. Multiple such options may be used at the same time.
  • -DRETDEC_ENABLE_<component>=ON to build only the specified component(s) (multiple such options can be used at once), and its (theirs) dependencies. By default, all the components are built. If at least one component is enabled via this mechanism, all the other components that were not explicitly enabled (and are not needed as dependencies of enabled components) are not built. See cmake/options.cmake for all the available component options.
    • -DRETDEC_ENABLE_ALL=ON can be used to (re-)enable all the components.
    • Alternatively, -DRETDEC_ENABLE=<comma-separated component list> can be used instead of -DRETDEC_ENABLE_<component>=ON (e.g. -DRETDEC_ENABLE=fileformat,loader,ctypesparser is equivalent to -DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ON).

Build in Docker

Docker support is maintained by community. If something does not work for you or if you have suggestions for improvements, open an issue or PR.

Build Image

Building in Docker does not require installation of the required libraries locally. This is a good option for trying out RetDec without setting up the whole build toolchain.

To build the RetDec Docker image, run

docker build -t retdec - < Dockerfile

This builds the image from the master branch of this repository.

To build the image using the local copy of the repository, use the development Dockerfile, Dockerfile.dev:

docker build -t retdec:dev . -f Dockerfile.dev

Run Container

If your uid is not 1000, make sure that the directory containing your input binary files is accessible for RetDec:

chmod 0777 /path/to/local/directory

Now, you can run the decompiler inside a container:

docker run --rm -v /path/to/local/directory:/destination retdec retdec-decompiler /destination/binary

Note: Do not modify the /destination part is. You only need to change /path/to/local/directory. Output files will then be generated to /path/to/local/directory.

Nightly Builds

We generate up-to-date RetDec packages from the latest commit in the master branch in two ways:

  • Using our TeamCity servers
  • Using Github Actions.

The builds are mostly meant to be used by RetDec developers, contributors, and other people experimenting with the product (e.g. testing if an issue present in the official release still exists in the current master).

You can use these as you wish, but keep in mind that there are no guarantees they will work on your system (especially the Linux version), and that regressions are a possibility. To get a stable RetDec version, either download the latest official pre-built package or build the latest RetDec version tag.

TeamCity

Github Actions

You can find builds for macOS, Linux and Windows in the latest RetDec CI workflow run.

Project Documentation

See the project documentation for an up to date Doxygen-generated software reference corresponding to the latest commit in the master branch.

Related Repositories

  • retdec-idaplugin -- Embeds RetDec into IDA (Interactive Disassembler) and makes its use much easier.
  • retdec-r2plugin -- Embeds RetDec into Radare2 and makes its use much easier.
  • retdec-regression-tests-framework -- A framework for writing and running regression tests for RetDec and related tools. This is a must if you plan to contribute to the RetDec project.
  • retdec-regression-tests -- A suite of regression tests for RetDec and related tools.
  • retdec-build-system-tests -- A suite of tests for RetDec's build system. This can also serve as a collection of demos on how to use RetDec libraries.
  • vim-syntax-retdecdsm -- Vim syntax-highlighting file for the output from the RetDec's disassembler (.dsm files).

License

Copyright (c) 2017 Avast Software, licensed under the MIT license. See the LICENSE file for more details.

RetDec incorporates a modified PeLib library. New modules added by Avast Software are licensed under the MIT license. The original sources are licensed under the following license:

RetDec uses third-party libraries or other resources listed, along with their licenses, in the LICENSE-THIRD-PARTY file.

Contributing

See RetDec contribution guidelines.

Acknowledgements

This software was supported by the research funding TACR (Technology Agency of the Czech Republic), ALFA Programme No. TA01010667.

retdec's People

Contributors

alexander-alekseev avatar ashketch-um avatar astrelsky avatar catap avatar dadda97 avatar dberlin avatar fr0gger avatar houndthe avatar jakubpruzinec avatar jurajholub avatar ladislav-zezula avatar leftmostcat avatar manouchehri avatar matejkastak avatar mbandzi avatar metthal avatar neverwin avatar palant avatar petermatula avatar pruzko avatar richardlford avatar s3rvac avatar samjoan avatar seviezhou avatar stek29 avatar takano32 avatar tamaroth avatar thecodez avatar xkubov avatar xvenge00 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

retdec's Issues

Utilization of multiple cores

Just wondering, is there a possibility to run retdec on multiple cores?

My decompilation process seems to be 'stuck' on converting function_f8294()... for several hours. I don't know if running the process on multiple cores would even help... or do I just need a faster CPU?

Thanks,
Sam

fileinfo: infinite recursion in Gathering file information step

I tried running decompile.sh on a test binary, and got stuck at the Gathering file information step.

##### Gathering file information...
RUN: /usr/bin/fileinfo.sh -c /home/u/Desktop/foo.c.json --similarity /home/u/Desktop/foo.exe --no-hashes=all --crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
/bin/bash: warning: shell level (1000) too high, resetting to 1

From the looks of it, fileinfo.sh is invoked with an increasing number of identical --crypto arguments, Output from ps aux | grep fileinfo:

u          306  0.0  0.0  16452  3948 pts/1    S+   13:28   0:00 /bin/bash /usr/bin/fileinfo.sh
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara
-c /home/u/Desktop/foo.c.json --similarity /home/u/Desktop/foo.exe --no-hashes=all
--crypto /usr/bin/../share/generic/yara_patterns/signsrch/signsrch.yara

bin2llvmir: produce self-contained LLVM IR

This meta issue intends to track the development of bin2llvmir, with the goal of producing self-contained LLVM IR, which may be consumed by other tools, such as symbolic execution engines (e.g. klee), other binary analysis tools, etc.

Discussions on how best to do this may be contained here, and specific issues related to the binary to LLVM IR translation may be referenced from here (e.g. the contents of wide-strings being lost in .ll representation, but present in .bc representation: #38.)

The end-goal may be to reach a functionality similar to that of mcsema, which produces recompilable LLVM IR. However, this is considered difficult, and not the specific aim of RetDec (which seeks to produce readable LLVM IR and HLL), so if this should be the end goal is still up for discussion. It could be enough to produce self-contained LLVM IR that may be fed to symbolic execution engines.

Do you plan to open source the web interface?

Hi folks,

Just wanted to say amazing work, been using this project for a few years now for CTF/VR work.

The fact you guys have open sourced such an awesome product is really good to see. Excited to finally have a mature open source decompiler. Hopefully someone can give the other paid solutions a run for their money.

My question is a little odd, the UI you guys use on retdec.com will that be open sourced? I've talked to my team about it and they're very interested in running it on one of our large servers and letting researchers connect to it and upload samples. The retdec.com UI was slick as hell. Was just wondering if you have any intention of open sourcing that?

Cheers :-)

decompile.sh: "retdec/scripts/fileinfo: No such file or directory"

I really wanted to try out retdec, the compile finished successfully -- without any manual intervention -- after 1.5 hours.

[100%] Built target llvmir2hlltool
real 5700.87
user 5640.37
sys 320.04

However, when trying to use decompile.sh on a test binary, I got the following error:

##### Gathering file information...
RUN: /home/u/Desktop/retdec_play/retdec/scripts/fileinfo -c /home/u/Desktop/foo.c.json --similarity /home/u/Desktop/foo.exe --no-hashes=all --crypto /home/u/Desktop/retdec_play/retdec/scripts/../share/generic/yara_patterns/signsrch/signsrch.yara
/home/u/Desktop/retdec_play/retdec/scripts/decompile.sh: line 667: /home/u/Desktop/retdec_play/retdec/scripts/fileinfo: No such file or directory

Error setting up Windows 64b environment (error: failed retrieving file)

pacman -S tar upx bc wget
fails saying following:

error: failed retrieving file 'ucl-1.03-1-x86_64.pkg.tar.xz' from repo.msys2.org : Maximum file size exceeded
error: failed retrieving file 'ucl-1.03-1-x86_64.pkg.tar.xz' from downloads.sourceforge.net : Maximum file size exceeded
error: failed retrieving file 'ucl-1.03-1-x86_64.pkg.tar.xz' from www2.futureware.at : Maximum file size exceeded
warning: failed to retrieve some files
error: failed to commit transaction (download library error)
Errors occurred, no packages were upgraded.

black screen after high ram usage

When I tried decompiling an executable file, my ram usage sky rocket up to 98% or something, my computer heated and I got a nice black screen. The ram usage didn't go up immediately, but I started to notice significant slow down after some time, and I checked it was some process related to retdec that was the cause. Then just a black screen. Had to force shut down. Happened on windows 8.1. I know this information isn't particularly helpful, but try to decompile a fairly large 32-bit executable and watch the ram usage. I may be the only one who got a black screen, but can't be the only one with RAM usage sky rocketing to unreasonable levels.

As a side note, congratulations on the project. Even though I couldn't use this yet, I read https://retdec.com/web/files/publications/retdec-slides-botconf-2017.pdf and thought it's awesome. This program seems to decompile with the same quality or even better than hex-rays, and that's really something considering that all other decompilers I've tested so far besides hex-rays sucked. This decompiler seems very powerful. I guess I was just unlucky, but hopefully I'll be able to use it soon. Congratulations.

Keep only a single clone of LLVM

deps/llvm AND deps/fileformat/deps/llvm AND deps/capstone2llvmir/deps/llvm AND deps/fnc-patterns/deps/fileformat/deps/llvm ??

Look into conan for sane c++ dependency management...

Build fails on openSUSE 42.2

Hi,
I'm running into an error when the compiler gets to tl-cpputils:

[  0%] No install step for 'llvm-project'
[  1%] Completed 'llvm-project'
[  1%] Built target llvm-project
Scanning dependencies of target tl-cpputils
[  1%] Building CXX object deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/CMakeFiles/tl-cpputils.dir/address.cpp.o
In file included from /home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/address.h:15:0,
                 from /home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/address.cpp:13:
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:179:34: error: expected type-specifier
 template <typename T, typename = std::enable_if_t<std::is_integral<T>::value, void>> class RangeContainer
                                  ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:179:34: error: expected โ€˜>โ€™
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:202:11: error: expected primary-expression before โ€˜autoโ€™
  decltype(auto) operator[](std::size_t index) { return _ranges[index]; }
           ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:202:11: error: expected โ€˜)โ€™ before โ€˜autoโ€™
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:202:2: error: expected unqualified-id before โ€˜decltypeโ€™
  decltype(auto) operator[](std::size_t index) { return _ranges[index]; }
  ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:203:11: error: expected primary-expression before โ€˜autoโ€™
  decltype(auto) operator[](std::size_t index) const { return _ranges[index]; }
           ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:203:11: error: expected โ€˜)โ€™ before โ€˜autoโ€™
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:203:2: error: expected unqualified-id before โ€˜decltypeโ€™
  decltype(auto) operator[](std::size_t index) const { return _ranges[index]; }
  ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h: In member function โ€˜void tl_cpputils::RangeContainer<T, <template-parameter-1-2> >::addRange(RangeT&&)โ€™:
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:217:20: error: parameter declared โ€˜autoโ€™
     [](const auto& range, const auto& start) {
                    ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:217:39: error: parameter declared โ€˜autoโ€™
     [](const auto& range, const auto& start) {
                                       ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h: In lambda function:
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:218:13: error: โ€˜rangeโ€™ is not captured
      return range.getEnd() + 1 < start;
             ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:218:34: error: โ€˜startโ€™ was not declared in this scope
      return range.getEnd() + 1 < start;
                                  ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h: In member function โ€˜void tl_cpputils::RangeContainer<T, <template-parameter-1-2> >::addRange(RangeT&&)โ€™:
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:222:20: error: parameter declared โ€˜autoโ€™
     [](const auto& end, const auto& range) {
                    ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:222:37: error: parameter declared โ€˜autoโ€™
     [](const auto& end, const auto& range) {
                                     ^
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h: In lambda function:
/home/USER/git/retdec/deps/capstone2llvmir/deps/tl-cpputils/include/tl-cpputils/range.h:223:23: error: โ€˜rangeโ€™ is not captured
      return end + 1 < range.getStart();
                       ^
deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/CMakeFiles/tl-cpputils.dir/build.make:62: recipe for target 'deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/CMakeFiles/tl-cpputils.dir/address.cpp.o' failed
make[2]: *** [deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/CMakeFiles/tl-cpputils.dir/address.cpp.o] Error 1
CMakeFiles/Makefile2:1378: recipe for target 'deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/CMakeFiles/tl-cpputils.dir/all' failed
make[1]: *** [deps/capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/CMakeFiles/tl-cpputils.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

My guess is, that I'm missing a package, I can't seem to find out which one I'm missing though. Let me know if you need any further information. Thanks!

$SHARE_DIR cleanup on install???

While not exactly recommended by README, If I ever wanted to install into /usr or /usr/local prefix your retdec/cmake/install-share.sh would rm -rf my $SHARE_DIR.

Please fix before somebody tries to install into their /usr.

tomas@tpruzina build # sandbox.py -p make-install make install
...
-- Install configuration: "Release"
rm: cannot remove '/usr/local/share/doc/vlc/libvlc/QtPlayer': Read-only file system
...
rm: cannot remove '/usr/local/share/wine': Read-only file system

RUN: wget https://github.com/avast-tl/retdec-support/releases/download/2017-12-12/retdec-support_2017-12-12.tar.xz -O /usr/local/retdec-support_2017-12-12.tar.xz
/usr/local/retdec-support_2017-12-12.tar.xz: Read-only file system
ERROR: wget failed
rm: cannot remove '/usr/local/share/doc/vlc/libvlc/QtPlayer': Read-only file system
...
rm: cannot remove '/usr/local/share/doc/vlc/lua/http/requests': Read-only file system
rm: cannot remove '/usr/local/share/wine': Read-only file system

CMake Error at cmake_install.cmake:47 (message):
RetDec share directory installation FAILED

r3000 MIPS output issues

Hi folks,

first of all, thank you very much for open-sourcing, I've been looking for a decent MIPS decompiler for a long time.

I work on really old binaries (GCC 2.X era), so not sure if reports like this would be usefull or even apply to modern MIPS code, therefore any code pointers that may help me to debug on my own would be appreciated too.

asm example

bash .\bin\decompile.sh .\mips\ex1.bin -a mips -m raw -e little --raw-entry-point 0x8002DFF0 --raw-section-vma 0x8002DFF0

int32_t entry_point(int32_t a1, int32_t a2) {
    *(int32_t *)-0x7ffaff04 = 0x10000 * a2 - 0x10000;
    *(int32_t *)-0x7ffaff08 = a1;
    return 0;
}
  1. Minor, but annoying: Params are 1-based but all MIPS docs/tools that I am aware (including IDA) are using a0 - a3 for function params.

  2. Pointers got miscalculated. In the original code the pair

lui at, 0x8005
sw a1, 0xFC(at)

should be equal to [(0x8005 << 16) + 0xFC] = a1, but something got confused with signed/unsigned bit?

  1. 0x10000 * a2 - 0x10000; part is weird while functionally equivalent. I would expect something simpler like (a2 - 1) << 16;

tldr: Desired output

int32_t entry_point(int32_t a0, int32_t a1) {
    *(int32_t *)0x800500FC = (a1 - 1) << 16;
    *(int32_t *)0x800500F8 = a0;
    return 0;
}

RetDec recognizes GCC 7.2.0 binaries as GCC 4.6.3

hi, I want to know if retdec on github and on online server have the different version. On my Arch Linux pc, gcc version is 7.2.0. And then, I try to decompile a binary.

This is the result from REST API:

// Detected compiler/packer: gcc (7.2.0)

and the result from my local build:

// Detected compiler/packer: gcc (4.6.3)

its wrong.

btw, the project is amazing!

High-level documentation of the interaction between tools in the decompilation pipeline

This issue tracks the addition of high-level documentation, which describes the interaction between the various tools of the decompilation pipeline, what input they take (i.e. which input formats, produced by which tools) and what output they produce.

From my current understanding of the RetDec decompilation pipeline, this could be described with the following graph. For those with better understanding, feel free to update the graph to make it more accurate, and provide additional comments on the interaction between these tools. Once a good high-level documentation has been produced, it may be added as Markdown files to some directory, perhaps doc? Or design?

DOT file at: https://gist.github.com/mewmew/bf74e6fc0e96ab67576982baacc17937

RetDec decompilation pipeline

(Note, in the above illustration, blue boxes represent tools, light green circles input and output formats, and darker green circles meta input and output formats. A meta input and output format is a set of formats (e.g. "binary" is ELF or PE or raw, etc).

Fix Avast File Download Vulnerability

The Avast Software is served from the Avast website over HTTP in clear-text and is subject to MITM vulnerability.

Any Malware Infection Appliance (or just opensource Bettercap) can infect Avast users when they first download the Avast software.

Please see https://twitter.com/fpietrosanti/status/881888886678581249

I tried to report to Avast without reply, maybe from Avast lab you can have the infrastructure team in charge of the download to fix the issue. Thanks

screen shot 2017-12-14 at 14 59 16

Double lib prefix in compiled libraries

The libraries liblibdwarf.so & liblibelf.so have an extra 'lib'.

The contents of CMAKE_INSTALL_PREFIX/lib:

-rw-r--r-- 1 hugo hugo 318K Dec 14 11:14 liblibdwarf.so
-rw-r--r-- 1 hugo hugo 132K Dec 14 11:14 liblibelf.so

Changing this should be as simple as editing a few CMakeLists.txt. I may look into this in the next few days.

Segmentation fault in llvmir2hll due to insufficient stack space

Hi. Running retdec under Windows Server 2016, getting this:

...
 -> converting function_7ca104() ( 2052.13s )
 -> converting entry_point() ( 2052.13s )
Running phase: removing functions prefixed with [__decompiler_undefined_function_] ( 2053.03s )
decompile.sh: line 947:  5356 Segmentation fault      $LLVMIR2HLL "${LLVMIR2HLL_PARAMS[@]}"
Error: Decompilation of file '/c/retdec/bin/myfile.c.backend.bc' failed

myfile.exe can be downloaded here: https://www.dropbox.com/s/jm7xnxtto3r4jxf/myfile.zip?dl=0

Please, help!

Simple assembly code involving syscalls does not get decompiled correctly

Code

BITS 32
global _start

section .text
_start:
    	mov eax, 5 ; sys_open
    	mov ebx, fileName
	mov ecx, 66 ; creation flags: O_RDWR | O_CREAT
	mov edx, 292 ; file mode: S_IRUSR | S_IRGRP | S_IROTH
	int 0x80 ; syscall, eax now contains file descriptor

	mov ebx, eax
	mov eax, 4 ; sys_write
	mov ecx, payload
	mov edx, payloadSize
	int 0x80

	mov eax, 1
	int 0x80
fileName:
    	db  "/tmp/myfile",0
payload:
	db "malicious payload here", 0ah, 0
payloadSize: equ $-payload

Build and run

nasm -f elf test.asm && ld -m elf_i386 test.o && ./a.out

Retdec output

//
// This file was generated by the Retargetable Decompiler
// Website: https://retdec.com
// Copyright (c) 2017 Retargetable Decompiler <[email protected]>
//

#include <stdint.h>

// ------------------- Function Prototypes --------------------

int32_t _start(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, uint32_t a6, int32_t a7, int32_t a8);
int32_t unknown_80480c4(void);
int32_t unknown_80480fe(void);
int32_t unknown_8048100(void);
int32_t unknown_8048116(void);
int32_t unknown_8048117(void);

// ------------------------ Functions -------------------------

// Address range: 0x8048060 - 0x80480b3
int32_t _start(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, uint32_t a6, int32_t a7, int32_t a8) {
    // 0x8048060
    unknown_8048100();
    unknown_80480c4();
    unknown_80480fe();
    unknown_8048116();
    char * v1 = (char *)(a7 + 101); // 0x80480ad_0
    *v1 = (char)((int32_t)*v1 & a6 / 256);
    int32_t v2 = unknown_8048117(); // 0x80480b0
    return (int32_t)*(char *)v2 | v2;
}

// --------------------- Meta-Information ---------------------

// Detected compiler/packer: elfcrypt (1.0)
// Detected functions: 1
// Decompiler release: v2.2.1 (2016-09-07)
// Decompilation date: 2017-12-14 10:28:45

I'm not experienced in low level programming, but it seems like, that the C code does not reflect what is going on...

Maybe it is confused by storing data in .text section?

Add Mac OS PEF support to retdec

I noticed that retdec supports the PPC architecture already, so it would be nice if it could parse the Mac OS (pre OS X) PEF file format rather than having to submit the file as a raw byte stream.

Compiling back LLVM IR

Hi there and congratulations with open-sourcing such a useful tool. :)

As an experiment, I tried to compile back generated *.bc file. And got many undefined reference errors on _asm_smth(), pseudo_smth() calls and many unknown_smth symbols. Is there any future possibility to recompile binaries?

Linux build failed

Hi, I trying to install on Linux Mint 18.1 64-bit but get an error:

Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
autoreconf: failed to run aclocal: No such file or directory
deps/fileformat/deps/yaracpp/deps/CMakeFiles/yara.dir/build.make:120: recipe for target 'deps/fileformat/deps/yaracpp/deps/yara/src/yara-stamp/yara-configure-linux' failed
make[2]: *** [deps/fileformat/deps/yaracpp/deps/yara/src/yara-stamp/yara-configure-linux] Error 1
CMakeFiles/Makefile2:2877: recipe for target 'deps/fileformat/deps/yaracpp/deps/CMakeFiles/yara.dir/all' failed
make[1]: *** [deps/fileformat/deps/yaracpp/deps/CMakeFiles/yara.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

I've installed all the required packages. Any suggestion what could be the issue ?

Support for decompilation of 64-bit x86 files?

Since this question is going to get asked sooner or later, might as well ask it now: what needs to implemented for 64-bit support?

llvmir2hll was able to decompile a simple hello world LLVM IR file compiled by a 64-bit Linux and macOS host. I didn't test anything complex or McSema (which someone should definitely try and let us know!).

Is bin2llvmir the main road block?

Use the repo tool by google for your build system

You should consider use the repo tool by google for your build system. We are cloning and building the same repositories over and over again because you don't use a shared folder for all of your dependencies. This results in big repository size, using a lot of unnecessary processing power, using a lot of unnecessary time and a messy cmake build.

Take a look a this project which is using repo: https://github.com/aurora-fw
Repo Tool: https://source.android.com/setup/using-repo

Add Progressbar

A progressbar especially for the converting functions stage would be nice. Its currently running for 17h and I have no clue when it will be finished. A progressbar would be an easy way to estimate how far along it is.

Segmentation fault in bin2llvmir (phase "Global to local optimization")

Running OpenSuse Tumbleweed.

decompile.sh is in /retdec/bin/
cmake .. -DCMAKE_INSTALL_PREFIX=<path>
make && make install
Installed without issues

But when running decompile.sh on a hello world C program

Running phase: Initialization ( 0.00s )
Running phase: LLVM ( 0.01s )
Running phase: Providers initialization ( 0.01s )
Running phase: Input binary to LLVM IR decoding ( 0.88s )
Running phase: Assembly instruction optimization ( 0.95s )
Running phase: LLVM ( 0.95s )
Running phase: (Un)Volatilize optimization ( 0.95s )
Running phase: LLVM ( 0.95s )
Running phase: (Un)Volatilize optimization ( 0.95s )
Running phase: Control flow optimization ( 0.95s )
Running phase: Control flow function detection optimization ( 0.96s )
Running phase: Main function identification optimization ( 0.96s )
Running phase: Assembly register optimization ( 0.96s )
Running phase: Stack optimization ( 0.96s )
Running phase: Control flow optimization ( 0.97s )
Running phase: Conditional branch optimization ( 0.97s )
Running phase: Syscalls optimization ( 0.97s )
Running phase: Libgcc idioms optimization ( 0.97s )
Running phase: Constants optimization ( 0.97s )
Running phase: Function parameters and returns optimization ( 0.98s )
Running phase: Register localization optimization ( 0.98s )
Running phase: Data type conversions optimization ( 0.98s )
Running phase: Simple types recovery optimization ( 0.98s )
Running phase: Disassembly generation ( 0.99s )
Running phase: Assembly mapping instruction removal ( 0.99s )
Running phase: Selected functions optimization ( 0.99s )
Running phase: Unreachable functions optimization ( 0.99s )
Running phase: Data type conversions optimization ( 0.99s )
Running phase: Stack protection optimization ( 0.99s )
Running phase: LLVM ( 0.99s )
Running phase: Never-returning-functions optimization ( 1.01s )
Running phase: C++ adapter methods optimization ( 1.01s )
Running phase: C++ class hierarchy optimization ( 1.01s )
Running phase: LLVM ( 1.02s )
Running phase: Simple types recovery optimization ( 1.03s )
Running phase: Stack pointer operations optimization ( 1.03s )
Running phase: Data type conversions optimization ( 1.04s )
Running phase: Instruction idioms optimization ( 1.04s )
Running phase: LLVM ( 1.04s )
Running phase: Global to local optimization ( 1.04s )
./decompile.sh: line 900: 15396 Segmentation fault      (core dumped) $BIN2LLVMIR "${BIN2LLVMIR_PARAMS[@]}" -o "$OUT_BACKEND_BC"
Error: Decompilation to LLVM IR failed

Edit: I doubt it is of any significance but when I submit the hello world program to the online decompiler it is successful.

Failed to build on Ubuntu 16.04.3 LTS due to missing CMakeLists.txt files

OS: Linux Duster 4.4.0-103-generic #126-Ubuntu SMP Mon Dec 4 16:23:28 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

cmake: 3.10
mkdir build && cd build
โžœ build git:(master) /usr/local/bin/cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local
-- The CXX compiler identification is GNU 5.4.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Setting build type to 'Release' as none was specified.
CMake Error at deps/CMakeLists.txt:2 (add_subdirectory):
The source directory

/home/udi/code/retdec/deps/capstone2llvmir

does not contain a CMakeLists.txt file.

Add support for the Ninja CMake generator

Using Ninja would significantly speed up the process of small rebuilds, and make parallelism work easily out of the box. This would help with #2 and #7.

Tried to do this myself, but wasn't able to figure out some of the CMakeLists.txt dependencies. Usually once I/we figure out what the build dependency issues are, it's as simple as:

cmake .. -GNinja -DCMAKE_INSTALL_PREFIX=/local/bin
ninja
ninja install

Build failed: cannot find -ltinfo

Hi. This is the error message during a build on a
Linux machine 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux :

/usr/bin/ld: cannot find -ltinfo /usr/bin/ld: cannot find -ltinfo collect2: error: ld returned 1 exit status deps/capstone2llvmir/src/capstone2llvmirtool/CMakeFiles/capstone2llvmirtool.dir/build.make:169: recipe for target 'deps/capstone2llvmir/src/capstone2llvmirtool/capstone2llvmir' failed make[2]: *** [deps/capstone2llvmir/src/capstone2llvmirtool/capstone2llvmir] Error 1 CMakeFiles/Makefile2:1515: recipe for target 'deps/capstone2llvmir/src/capstone2llvmirtool/CMakeFiles/capstone2llvmirtool.dir/all' failed make[1]: *** [deps/capstone2llvmir/src/capstone2llvmirtool/CMakeFiles/capstone2llvmirtool.dir/all] Error 2 Makefile:151: recipe for target 'all' failed make: *** [all] Error 2

General issue tracking memory usage of llvmir2hll

This is a general issue tracking the memory usage required to run llvmir2hll.

Background: I tried to run ./decompile.sh on a 1 MB sample executable (x86, 32-bit PE). All steps succeeded smoothly, until the llvmir2hll step, which managed to hang my laptop as it depleted the available RAM. The llvmir2hll process took roughly 7.1 GB at this point (and my hardware has 8 GB of RAM).

Have the memory usage of llvmir2hll been profiled before? If so, what are the low-hanging fruit to decrease memory usage for "regular" binaries, those below say 5 MB.

My wish is that as retdec develops, it should be possible to decompile an arbitrarily large executable, never requiring more than 1 GB of RAM memory at any given time during the decompile pipeline. However, this should be considered a long-term goal; as that requires intermediate representations of decompiled functions to be stored to disk, so that not all functions are kept in memory at the same time.

For now, locating low hanging fruit so that a decompile of binaries smaller than 5 MB (or so) should succeed using at most 3 GB of RAM. This seems like a worthy intermediate goal for memory usage optimization.

Failed to build on Ubuntu 17.10 x64 ("internal compiler error")

Hi guys, I'm a c++ compile newbie.

Long story short, I can't figure out why it fails to compile.
Can someone point me in the right direction on why it might fail?

This is the output I get when building it on Ubuntu 17.10 x64:

[ 25%] Building CXX object lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MachineVerifier.cpp.o
[ 25%] Building CXX object lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/PatchableFunction.cpp.o
[ 25%] Building CXX object lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MIRPrinter.cpp.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.
lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/build.make:1958: recipe for target 'lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MIRPrinter.cpp.o' failed
make[5]: *** [lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MIRPrinter.cpp.o] Error 4
CMakeFiles/Makefile2:719: recipe for target 'lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/all' failed
make[4]: *** [lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/all] Error 2
Makefile:105: recipe for target 'all' failed
make[3]: *** [all] Error 2
deps/capstone2llvmir/deps/llvm/CMakeFiles/llvm-project.dir/build.make:112: recipe for target 'deps/capstone2llvmir/deps/llvm/llvm-project-prefix/src/llvm-project-stamp/llvm-project-build' failed
make[2]: *** [deps/capstone2llvmir/deps/llvm/llvm-project-prefix/src/llvm-project-stamp/llvm-project-build] Error 2
CMakeFiles/Makefile2:1266: recipe for target 'deps/capstone2llvmir/deps/llvm/CMakeFiles/llvm-project.dir/all' failed
make[1]: *** [deps/capstone2llvmir/deps/llvm/CMakeFiles/llvm-project.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

bin2llvmir: Contents of wide-string information lost

When lifting binary code to LLVM IR, the contents of wide-strings seem to be lost in the process. Note the use of the pseudo-name %wide-string rather than the actual contents of the string. Which in this case happens to be "(null)", 0 in UTF-16 Little Endian format.

@global_var_48039c.3418 = constant [7 x i16] %wide-string

Implement "Meaningful Variables Names for Decompiled Code A Machine Translation Approach" in retdec

See http://www.contrib.andrew.cmu.edu/~apjaffe/smt/decompilation-renaming-2.pdf

Quote from @apjaffe's abstract:

Decompiled code lacks meaningful variable names. We used statistical machine translation to suggest variable names that are natural given the context. This technique has previously been successfully applied to obfuscated JavaScript code, but decompiled C code poses unique challenges in constructing an aligned corpus and selecting the best translation from among several candidates.

In @apjaffe's paper, they use Hex-Rays Decompiler to generate training dataset and raw decompiled C code, with some effort the solution could be ported to RetDec as well.

Decompilation errors on 64b Windows 10 with 32b MSYS2

Setting up the ida plugin from these instructions, ida starts to run the plugin:

https://n0where.net/retargetable-machine-code-decompiler-retdec/

Referring to x64 Windows box, installed Msys32 variant (Msys64 is a dog and will not update)
Issue 1: IDA runs the plugin but fails giving errors as per below respectively

1

then

2

Issue 2: Running directly in bash gives a myriad of other errors. If I add architecture (-a) and format type (-p), I now get issue with format type "pe" not being supported.

$ decompile.sh exploit_x86.exe -a x86 -f pe

Checking if file is a Mach-O Universal static library...

RUN: /c/retdec/bin/macho-extractor --list /c/retdec/bin/exploit_x86.exe

Checking if file is an archive...

RUN: /c/retdec/bin/ar-extractor --arch-magic /c/retdec/bin/exploit_x86.exe
Not an archive, going to the next step.

Gathering file information...

RUN: /c/retdec/bin/fileinfo -c /c/retdec/bin/exploit_x86.c.json --similarity /c/retdec/bin/exploit_x86.exe --no-hashes=all --crypto /c/retdec/bin/../share/generic/yara_patterns/signsrch/signsrch.yara

Trying to unpack /c/retdec/bin/exploit_x86.exe into /c/retdec/bin/exploit_x86-unpacked.tmp by using generic unpacker...

RUN: /c/retdec/bin/unpacker -d /c/retdec/bin/unpacker-plugins -o /c/retdec/bin/exploit_x86-unpacked.tmp /c/retdec/bin/exploit_x86.exe

Unpacking by using generic unpacker: nothing to do
Trying to unpack /c/retdec/bin/exploit_x86.exe into /c/retdec/bin/exploit_x86-unpacked.tmp by using UPX...

RUN: upx -d /c/retdec/bin/exploit_x86.exe -o /c/retdec/bin/exploit_x86-unpacked.tmp

Unpacking by using UPX: nothing to do

Error: Unsupported target format 'PE'. Supported formats: ELF32, PE32, Intel HEX 32.

relocation R_X86_64_32S against symbol [...] can not be used when making a shared object; recompile with -fPIC

libtool: link: ( cd ".libs" && rm -f "libyara.la" && ln -s "../libyara.la" "libyara.la" )
libtool: link: gcc -std=gnu99 -Wall -I./libyara/include -O3 -pthread -o yarac args.o yarac.o  libyara/.libs/libyara.a -lm -pthread
libtool: link: gcc -std=gnu99 -Wall -I./libyara/include -O3 -pthread -o yara args.o threading.o yara.o  libyara/.libs/libyara.a -lm -pthread
[ 35%] No install step for 'yara'
[ 36%] Completed 'yara'
[ 36%] Built target yara
Scanning dependencies of target yaracpp
[ 36%] Building CXX object deps/fileformat/deps/yaracpp/src/CMakeFiles/yaracpp.dir/types/yara_match.cpp.o
[ 36%] Building CXX object deps/fileformat/deps/yaracpp/src/CMakeFiles/yaracpp.dir/types/yara_meta.cpp.o
[ 36%] Building CXX object deps/fileformat/deps/yaracpp/src/CMakeFiles/yaracpp.dir/types/yara_rule.cpp.o
[ 36%] Building CXX object deps/fileformat/deps/yaracpp/src/CMakeFiles/yaracpp.dir/yara_detector/yara_detector.cpp.o
[ 37%] Linking CXX static library libyaracpp.a
[ 37%] Built target yaracpp
Scanning dependencies of target ar-extractor
[ 37%] Building CXX object deps/fileformat/src/ar-extractor/CMakeFiles/ar-extractor.dir/archive_wrapper.cpp.o
[ 37%] Building CXX object deps/fileformat/src/ar-extractor/CMakeFiles/ar-extractor.dir/detection.cpp.o
[ 37%] Linking CXX static library libar-extractor.a
[ 37%] Built target ar-extractor
Scanning dependencies of target ar-extractortool
[ 37%] Building CXX object deps/fileformat/src/ar-extractortool/CMakeFiles/ar-extractortool.dir/ar_extractor.cpp.o
[ 37%] Linking CXX executable ar-extractor
/usr/bin/ld: ../../../capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/libtl-cpputils.a(filesystem_path.cpp.o): relocation R_X86_64_32S against symbol `_ZN11tl_cpputils18FilesystemPathImpl13pathSeparatorE' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: ../../../capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/libtl-cpputils.a(string.cpp.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
deps/fileformat/src/ar-extractortool/CMakeFiles/ar-extractortool.dir/build.make:166: recipe for target 'deps/fileformat/src/ar-extractortool/ar-extractor' failed
make[2]: *** [deps/fileformat/src/ar-extractortool/ar-extractor] Error 1
CMakeFiles/Makefile2:3140: recipe for target 'deps/fileformat/src/ar-extractortool/CMakeFiles/ar-extractortool.dir/all' failed
make[1]: *** [deps/fileformat/src/ar-extractortool/CMakeFiles/ar-extractortool.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2

Build of retdec-config fails with "undefined reference to Json::Value"

I compile the Retdec source code. Error from compiling was showed an error as below.

[ 32%] Linking CXX executable retdec-config
../retdec-config/libretdec-config.a(architecture.cpp.o): In function `retdec_config::Architecture::getJsonValue() const':
architecture.cpp:(.text+0x4cd): undefined reference to `Json::Value::Value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
architecture.cpp:(.text+0x4da): undefined reference to `Json::Value::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
architecture.cpp:(.text+0x521): undefined reference to `Json::Value::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
architecture.cpp:(.text+0x5ce): undefined reference to `Json::Value::Value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
architecture.cpp:(.text+0x5db): undefined reference to `Json::Value::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
architecture.cpp:(.text+0x616): undefined reference to `Json::Value::Value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
architecture.cpp:(.text+0x623): undefined reference to `Json::Value::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

I check command line generate an error result again with $make VERBOSE=1. Error present as below.

cd /retdec/build/deps/fileformat/deps/retdec-config/src/retdec-configtool && cmake -E cmake_link_script CMakeFiles/retdec-configtool.dir/link.txt --verbose=1
/usr/local/bin/c++  -O3 -DNDEBUG   CMakeFiles/retdec-configtool.dir/retdec-configtool.cpp.o  -o retdec-config -Wl,-rpath,:::::::::::::: ../retdec-config/libretdec-config.a ../../../../../capstone2llvmir/deps/tl-cpputils/src/tl-cpputils/libtl-cpputils.a ../../../../../fnc-patterns/deps/fileformat/deps/retdec-config/deps/jsoncpp/jsoncpp-project-prefix/src/jsoncpp-project-build/src/lib_json/libjsoncpp.a /usr/local/lib64/libjsoncpp.a 
../retdec-config/libretdec-config.a(architecture.cpp.o): In function `retdec_config::Architecture::getJsonValue() const':
architecture.cpp:(.text+0x4cd): undefined reference to `Json::Value::Value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

Cross check library path of Jsoncpp library install in /usr/local/lib64/ completed.

Completely fails to decompile functions using RAII

I have now tested both the 32bit and the 64bit precompiled versions on Windows 10 and it doesnt seem to work at all for functions using RAII. I have tested simple programs compiled with Visual Studio 12 and 14 in debug and release ,with and without pdbs and with and without the -k switch. It seems to be able to decompile most of the library functions which have been linked into the program. It also decompiles some of the user supplied functions.
But every function using RAII for C++ objects decompiles to basically this:

abort();
// UNREACHABLE

Atleast it seems like RAII is the cause. Since getters and simple calculations not involving any objects are decompiled just fine. Here are some examples from 2 programs i decompiled with pdb information.

Edit:
Might also be related to the security cookie check combined with constant propagation.

Edit 2:
The cookie seems the more likely culprit as all the function that check their stack cookie only call abort in the decompiled output and there is not a single call to the check function even though it has been decompiled.

After seven years of development [..]

After seven years of development, Avast open-sources its machine-code decompiler for platform-independent analysis of executable files.

I'm sorry this blog post indicates after seven years of development.
But how on earth 11 commits?

Compiling in os x

I'm trying to compile the source on os x 10.13.

I got the cmake infrastructure using homebrew. Verified with standard tutorial that it works.

But when I try to do it on the downloaded source. I complains like this.

bash-3.2# pwd
/Users/admin/Downloads/retdec-master
bash-3.2# cmake -H.
-- The CXX compiler identification is AppleClang 9.0.0.9000037
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
CMake Error: The source directory "OUTPUT_VARIABLE" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
CMake Error at /usr/local/Cellar/cmake/3.10.1/share/cmake/Modules/CMakeTestCXXCompiler.cmake:30 (try_compile):
Failed to configure test project build system.
Call Stack (most recent call first):
CMakeLists.txt:4 (project)

-- Configuring incomplete, errors occurred!
See also "/CMakeFiles/CMakeOutput.log".

Could someone provide some instructions about building it.
Thanks,
Prokash

Build Issue on Fedora 26: error: possibly undefined macro: AC_PROG_LIBTOOL

Hello,

I was following your linux guide to build it on linux and run on some troubles with the build. My OS is fedora 26 x86_64 4.14.4-200.fc26.x86_64. Installed all the dependencies but I get a weird make error on llvm-project.

scanning dependencies of target llvm-dis
[100%] Building CXX object tools/llvm-dis/CMakeFiles/llvm-dis.dir/llvm-dis.cpp.o
[100%] Linking CXX executable ../../bin/llvm-dis
[100%] Built target llvm-dis
[ 29%] No install step for 'llvm-project'
[ 30%] Completed 'llvm-project'
[ 30%] Built target llvm-project
make: *** [Makefile:152: all] Error 2

The cmake runs with 0 problems that I can detect

cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/Downloads/avast/ -DRETDEC_DOC=ON
-- The CXX compiler identification is GNU 7.2.1
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Setting build type to 'Release' as none was specified.
-- The C compiler identification is GNU 7.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
Enabling CAPSTONE_ARM_SUPPORT
Enabling CAPSTONE_ARM64_SUPPORT
Enabling CAPSTONE_M68K_SUPPORT
Enabling CAPSTONE_MIPS_SUPPORT
Enabling CAPSTONE_PPC_SUPPORT
Enabling CAPSTONE_SPARC_SUPPORT
Enabling CAPSTONE_SYSZ_SUPPORT
Enabling CAPSTONE_XCORE_SUPPORT
Enabling CAPSTONE_X86_SUPPORT
Enabling CAPSTONE_TMS320C64X_SUPPORT
Enabling CAPSTONE_M680X_SUPPORT
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Looking for dirent.h
-- Looking for dirent.h - found
-- Looking for dlfcn.h
-- Looking for dlfcn.h - found
-- Looking for errno.h
-- Looking for errno.h - found
-- Looking for execinfo.h
-- Looking for execinfo.h - found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - found
-- Looking for limits.h
-- Looking for limits.h - found
-- Looking for link.h
-- Looking for link.h - found
-- Looking for malloc.h
-- Looking for malloc.h - found
-- Looking for malloc/malloc.h
-- Looking for malloc/malloc.h - not found
-- Looking for ndir.h
-- Looking for ndir.h - not found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for signal.h
-- Looking for signal.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for sys/dir.h
-- Looking for sys/dir.h - found
-- Looking for sys/ioctl.h
-- Looking for sys/ioctl.h - found
-- Looking for sys/mman.h
-- Looking for sys/mman.h - found
-- Looking for sys/ndir.h
-- Looking for sys/ndir.h - not found
-- Looking for sys/param.h
-- Looking for sys/param.h - found
-- Looking for sys/resource.h
-- Looking for sys/resource.h - found
-- Looking for sys/stat.h
-- Looking for sys/stat.h - found
-- Looking for sys/time.h
-- Looking for sys/time.h - found
-- Looking for sys/uio.h
-- Looking for sys/uio.h - found
-- Looking for termios.h
-- Looking for termios.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for utime.h
-- Looking for utime.h - found
-- Looking for zlib.h
-- Looking for zlib.h - found
-- Looking for fenv.h
-- Looking for fenv.h - found
-- Looking for FE_ALL_EXCEPT
-- Looking for FE_ALL_EXCEPT - found
-- Looking for FE_INEXACT
-- Looking for FE_INEXACT - found
-- Looking for mach/mach.h
-- Looking for mach/mach.h - not found
-- Looking for mach-o/dyld.h
-- Looking for mach-o/dyld.h - not found
-- Looking for histedit.h
-- Looking for histedit.h - not found
-- Performing Test HAVE_CXXABI_H
-- Performing Test HAVE_CXXABI_H - Success
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Looking for pthread_getspecific in pthread
-- Looking for pthread_getspecific in pthread - found
-- Looking for pthread_rwlock_init in pthread
-- Looking for pthread_rwlock_init in pthread - found
-- Looking for pthread_mutex_lock in pthread
-- Looking for pthread_mutex_lock in pthread - found
-- Looking for dlopen in dl
-- Looking for dlopen in dl - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Looking for compress2 in z
-- Looking for compress2 in z - found
-- Looking for setupterm in tinfo
-- Looking for setupterm in tinfo - not found
-- Looking for setupterm in terminfo
-- Looking for setupterm in terminfo - not found
-- Looking for setupterm in curses
-- Looking for setupterm in curses - not found
-- Looking for setupterm in ncurses
-- Looking for setupterm in ncurses - not found
-- Looking for setupterm in ncursesw
-- Looking for setupterm in ncursesw - not found
-- Looking for arc4random
-- Looking for arc4random - not found
-- Looking for backtrace
-- Looking for backtrace - found
-- Looking for getpagesize
-- Looking for getpagesize - found
-- Looking for getrusage
-- Looking for getrusage - found
-- Looking for setrlimit
-- Looking for setrlimit - found
-- Looking for isatty
-- Looking for isatty - found
-- Looking for futimens
-- Looking for futimens - found
-- Looking for futimes
-- Looking for futimes - found
-- Looking for writev
-- Looking for writev - found
-- Looking for mallctl
-- Looking for mallctl - not found
-- Looking for mallinfo
-- Looking for mallinfo - found
-- Looking for malloc_zone_statistics
-- Looking for malloc_zone_statistics - not found
-- Looking for mkdtemp
-- Looking for mkdtemp - found
-- Looking for mkstemp
-- Looking for mkstemp - found
-- Looking for mktemp
-- Looking for mktemp - found
-- Looking for closedir
-- Looking for closedir - found
-- Looking for opendir
-- Looking for opendir - found
-- Looking for readdir
-- Looking for readdir - found
-- Looking for getcwd
-- Looking for getcwd - found
-- Looking for gettimeofday
-- Looking for gettimeofday - found
-- Looking for getrlimit
-- Looking for getrlimit - found
-- Looking for posix_spawn
-- Looking for posix_spawn - found
-- Looking for pread
-- Looking for pread - found
-- Looking for realpath
-- Looking for realpath - found
-- Looking for sbrk
-- Looking for sbrk - found
-- Looking for srand48
-- Looking for srand48 - found
-- Looking for lrand48
-- Looking for lrand48 - found
-- Looking for drand48
-- Looking for drand48 - found
-- Looking for strtoll
-- Looking for strtoll - found
-- Looking for strtoq
-- Looking for strtoq - found
-- Looking for strerror
-- Looking for strerror - found
-- Looking for strerror_r
-- Looking for strerror_r - found
-- Looking for strerror_s
-- Looking for strerror_s - not found
-- Looking for setenv
-- Looking for setenv - found
-- Looking for dlerror
-- Looking for dlerror - found
-- Looking for dlopen
-- Looking for dlopen - found
-- Looking for GLIBC
-- Looking for GLIBC - found
-- Performing Test HAVE_INT64_T
-- Performing Test HAVE_INT64_T - Success
-- Performing Test HAVE_UINT64_T
-- Performing Test HAVE_UINT64_T - Success
-- Performing Test HAVE_U_INT64_T
-- Performing Test HAVE_U_INT64_T - Success
-- Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB - Success
-- Performing Test LLVM_HAS_ATOMICS
-- Performing Test LLVM_HAS_ATOMICS - Success
-- Performing Test SUPPORTS_NO_VARIADIC_MACROS_FLAG
-- Performing Test SUPPORTS_NO_VARIADIC_MACROS_FLAG - Success
-- Performing Test HAS_MAYBE_UNINITIALIZED
-- Performing Test HAS_MAYBE_UNINITIALIZED - Success
-- Target triple: x86_64-unknown-linux-gnu
-- Native target architecture is X86
-- Threads enabled.
-- Performing Test C_SUPPORTS_FPIC
-- Performing Test C_SUPPORTS_FPIC - Success
-- Performing Test CXX_SUPPORTS_FPIC
-- Performing Test CXX_SUPPORTS_FPIC - Success
-- Building with -fPIC
-- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG
-- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG - Success
-- Performing Test CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG
-- Performing Test CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG - Success
-- Performing Test C_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG
-- Performing Test C_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG - Failed
-- Performing Test CXX_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG
-- Performing Test CXX_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG - Failed
-- Performing Test C_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG
-- Performing Test C_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG - Failed
-- Performing Test CXX_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG
-- Performing Test CXX_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG - Success
-- Performing Test C_WCOMMENT_ALLOWS_LINE_WRAP
-- Performing Test C_WCOMMENT_ALLOWS_LINE_WRAP - Failed
-- Performing Test CXX_SUPPORTS_CXX11
-- Performing Test CXX_SUPPORTS_CXX11 - Success
-- Performing Test C_SUPPORTS_FNO_FUNCTION_SECTIONS
-- Performing Test C_SUPPORTS_FNO_FUNCTION_SECTIONS - Success
-- Performing Test C_SUPPORTS_FFUNCTION_SECTIONS
-- Performing Test C_SUPPORTS_FFUNCTION_SECTIONS - Success
-- Performing Test CXX_SUPPORTS_FFUNCTION_SECTIONS
-- Performing Test CXX_SUPPORTS_FFUNCTION_SECTIONS - Success
-- Performing Test C_SUPPORTS_FDATA_SECTIONS
-- Performing Test C_SUPPORTS_FDATA_SECTIONS - Success
-- Performing Test CXX_SUPPORTS_FDATA_SECTIONS
-- Performing Test CXX_SUPPORTS_FDATA_SECTIONS - Success
-- Found PythonInterp: /usr/bin/python2.7 (found version "2.7.14")
-- Constructing LLVMBuild project information
-- Targeting AArch64
-- Targeting ARM
-- Targeting Hexagon
-- Targeting Mips
-- Targeting PowerPC
-- Targeting Sparc
-- Targeting SystemZ
-- Targeting X86
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.3.12")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
-- Found Perl: /usr/bin/perl (found version "5.24.3")
-- Found FLEX: /usr/bin/flex (found version "2.6.1")
-- Found BISON: /usr/bin/bison (found version "3.0.4")
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found components: doxygen dot
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/Downloads/retdec/build

Any feedback would be appreciated.

Thanks!!

Windows build fails with "patch is not recognized as an internal or external command"

Docs state it's possible to build with any VS version after 2015. This happens with VS 2017 CE:

C:\retdec\build> cmake .. -DCMAKE_INSTALL_PREFIX=c:\retdec -G"Visual Studio 16 2017 Win64"
...
    59>C:\retdec\deps\capstone2llvmir\deps\llvm\src\lib\DebugInfo\PDB\DIA\DIASession.cpp(66): fatal error C1189: #error
       :  "Unknown Visual Studio version." [C:\retdec\build\deps\capstone2llvmir\deps\llvm\llvm-project-prefix\src\llvm
       -project-build\lib\DebugInfo\PDB\LLVMDebugInfoPDB.vcxproj] [c:\retdec\build\deps\capstone2llvmir\deps\llvm\llvm-
       project.vcxproj]

Decompilation takes too much memory

The file I'm decompiling is kinda publicly available but I'm not sure how to share it with devs because the people who have written the code probably don't want it to be decompiled in the first place.

I'd be happy to send the file to a dev via mail or some other means.

I'm running: ./decompiler.sh <path/to/dll>
Which at some point runs: llvmir2hll -target-hll=c -var-renamer=readable -var-name-gen=fruit -var-name-gen-prefix= -call-info-obtainer=optim -arithm-expr-evaluator=c -validate-module -llvmir2bir-converter=orig -o [...].dll.c [...].dll.c.backend.bc -enable-debug -emit-debug-comments -config-path=[...].dll.c.json

Once it reaches the step below, it slowly starts eating memory until at one point it quickly goes from 8GB -> 32 GB and then get's killed by docker.

How would I help debugging this? My guess would be it's running into some infinite depth loop.

Running phase: optimizations [normal] ( 52.09s )
 -> running RemoveUselessCastsOptimizer ( 52.09s )
 -> running UnusedGlobalVarOptimizer ( 52.63s )
 -> running DeadLocalAssignOptimizer ( 53.80s )
 -> running SimpleCopyPropagationOptimizer ( 65.16s )
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `v1_1002017b = (v3_10020166 + 1)` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `v1_1002031f = (v3_1002030a + 1)` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `v1_100200c9 = (v3_100200b4 + 1)` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `v1_10020f22 = (v3_10020f0d + 1)` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `goto 0x10020eca` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `eax_global_2d_to_2d_local = v3_10021abe` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `eax_global_2d_to_2d_local = v3_100224d9` -> skipping this edge
Warning: [NonRecursiveCFGBuilder] there is no node for an edge to `v10_1002391d = v2_1002386d` -> skipping this edge

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.