# Purpose `revng` is a static binary translator. Given a input ELF binary for one of the supported architectures (currently i386, x86-64, MIPS, ARM, AArch64 and s390x) it will analyze it and emit an equivalent LLVM IR. To do so, `revng` employs the QEMU intermediate representation (a series of TCG instructions) and then translates them to LLVM IR. # How to build `revng` employs CMake as a build system. In order to build `revng`, use [orchestra](https://github.com/revng/orchestra) and make sure you're [building revng from source](https://github.com/revng/orchestra#building-from-source). You can install as follows: ```sh orc install revng ``` Remember to enter an `orc shell` to run `revng`: ```sh orc shell revng --help ``` You can run the test suite as follows: ```sh orc install --test revng ``` # Example run The simplest possible example consists in the following: ```sh # Install revng orc install revng # Install the ARM toolchain orc install toolchain/arm/gcc # Enter in the build directory orc shell -c revng # Build ninja # Create hello world program cat > hello.c < int main(int argc, char *argv[]) { printf("Hello, world!\n"); } EOF # Compile armv7a-hardfloat-linux-uclibceabi-gcc \ -Wl,-Ttext-segment=0x20000 \ -static hello.c \ -o hello.arm # Translate ./bin/revng translate hello.arm # Run translated version ./hello.arm.translated # Hello, world! ```