A C++ library and tools providing easy access to the retdec.com decompilation service through their REST API.
C++ CMake
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
cmake
doc
include
src
tests
.gitignore
CHANGELOG.md
CMakeLists.txt
LICENSE
README.md

README.md

retdec-cpp

A C++ library and tools providing easy access to the retdec.com decompilation service through their public REST API.

Usage Example

The following example creates a decompiler, starts a decompilation of the given binary file, and prints the decompiled C code to the standard output.

#include <iostream>
#include <retdec/retdec.h>

using namespace retdec;

int main(int argc, char **argv) {
    if (argc != 3) {
        std::cerr << "usage: " << argv[0] << " API-KEY FILE\n";
        return 1;
    }

    try {
        Decompiler decompiler(
            Settings()
                .apiKey(argv[1])
        );
        auto decompilation = decompiler.runDecompilation(
            DecompilationArguments()
                .mode("bin")
                .inputFile(File::fromFilesystem(argv[2]))
        );
        decompilation->waitUntilFinished();
        std::cout << decompilation->getOutputHll();
        return 0;
    } catch (const Error &ex) {
        std::cerr << "error: " << ex.what() << "\n";
        return 1;
    }
}

Status

The library currently provides basic support of the decompilation, file-analyzing, and test services.

Requirements

To build the library and tools, you need:

The Boost and OpenSSL libraries have to be installed on your system. Other libraries are automatically downloaded and built if they are not present on your system.

Build and Installation

  • Clone the repository or download the sources into a directory. Lets call the directory retdec.
  • cd retdec
  • mkdir build && cd build
  • cmake ..
  • make && make install

You can pass additional parameters to cmake:

  • -DRETDEC_DOC=1 to build with API documentation (requires Doxygen, disabled by default).
  • -DRETDEC_TOOLS=1 to build with tools (disabled by default).
  • -DRETDEC_TESTS=1 to build with unit tests (disabled by default).
  • -DRETDEC_COVERAGE=1 to build with code coverage support (requires LCOV, disabled by default).
  • -DCMAKE_BUILD_TYPE=Debug to build with debugging information, which is useful during development. By default, the library is built in the Release mode.
  • -DCMAKE_INSTALL_PREFIX:PATH=/usr to set a custom installation path.

You can force a specific version of the required libraries by using the following cmake parameters:

  • -DBOOST_ROOT=$BOOST_DIR
  • -DCPPNETLIB_ROOT=$CPPNETLIB_DIR
  • -DOPENSSL_ROOT_DIR=$OPENSSL_DIR
  • -DJsonCpp_ROOT_DIR=$JSONCPP_DIR

The make call supports standard parameters, such as:

  • -j N to build the library by using N processors.
  • VERBOSE=1 to show verbose output when building the library.

Use

If you use CMake, you can incorporate the library into your project in the following way:

set(retdec_DIR "/path/to/installed/retdec/lib/cmake")
find_package(retdec)
include_directories(SYSTEM ${retdec_INCLUDE_DIR})

add_executable(your_app your_app.cpp)
target_link_libraries(your_app retdec)

API Documentation

The API documentation is available here:

You can also generate it by yourself (pass -DRETDEC_DOC=1 to cmake and run make doc).

License

Copyright (c) 2015-2016 Petr Zemek (s3rvac@gmail.com) and contributors.

Distributed under the MIT license. See the LICENSE file for more details.

Access from Other Languages

If you want to access the retdec.com decompilation service from other languages, check out the following projects:

  • retdec-python - A library and tools for accessing the service from Python.
  • retdec-sh - Scripts for accessing the service from shell.