mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
feature/hex-dump-container
HexDumpPipe dumps content of binary file in the similar way as hexdump tool with addition of PTML markup for instructions addresses. Continuous parts of binary code are wrapped with <span data-location-definition=""></span> where data-location-definition attribute contains Entry/BasicBlock/Instruction addresses in generic form. <span> tags can be nested if byte(s) belong to many instructions in code. At the end of the line every <span> is closed and opened on the next line again if it still applies to the next byte. MetaAddress are converted to IntervalMetaAddress (which implements own, optional-less operator-) and stored in boost::icl::intruval_map. This map is used to get addresses of instructions to which each byte belongs.
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 and make sure you're building revng from source.
You can install as follows:
orc install revng
Remember to enter an orc shell to run revng:
orc shell
revng --help
You can run the test suite as follows:
orc install --test revng
Example run
The simplest possible example consists in the following:
# 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 <<EOF
#include <stdio.h>
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!
Languages
C++
77.1%
Python
12.6%
MLIR
4.4%
CMake
1.9%
LLVM
1.4%
Other
2.5%