Update README.md

This commit is contained in:
Alessandro Di Federico
2022-10-26 18:15:50 +02:00
parent 8a61d2a69e
commit 5161ed3325
2 changed files with 67 additions and 67 deletions
+67
View File
@@ -0,0 +1,67 @@
# 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 <<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!
```
-67
View File
@@ -1,67 +0,0 @@
*******
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
To run the test suite simply, from the build directory, run:
.. code-block:: sh
# Enter in the build directory
orc shell -c revng
# Run the tests
ctest -j$(nproc)
***********
Example run
***********
The simplest possible example consists in the following:
.. code-block:: sh
# Install the ARM toolchain
orc install toolchain/arm/gcc
# Enter in the build directory
orc shell -c revng
# Build programs (skip building test material)
ninja revng-all-binaries
# 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!