
Bibliothek zum Übersetzen von Maschinencode in LLVM-Bitcode
Remill ist ein statischer Binärübersetzer, der Maschinencode-Anweisungen in LLVM-Bitcode übersetzt. Er übersetzt AArch64 (64-Bit-ARMv8), SPARC32 (SPARCv8), SPARC64 (SPARCv9), x86- und amd64-Maschinencode (einschließlich AVX und AVX512) in LLVM-Bitcode. Die Unterstützung für AArch32 (32-Bit-ARMv8 / ARMv7) befindet sich in Arbeit.
Remill konzentriert sich darauf, Anweisungen präzise zu liften. Es ist dafür gedacht, als Bibliothek für andere Werkzeuge verwendet zu werden, z. B. McSema.
Um zu verstehen, wie Remill funktioniert, kann man sich die folgenden Ressourcen ansehen:
Wenn Sie einen Beitrag leisten möchten, finden Sie weitere Informationen unter: Wie Sie beitragen können
Generieren Sie detaillierte API-Dokumentation mit Doxygen:
# Install Doxygen (macOS)
brew install doxygen graphviz
# Install Doxygen (Ubuntu/Debian)
sudo apt-get install doxygen graphviz
# Generate documentation
doxygen
# Open docs/doxygen/html/index.html in your browser
Weitere Einzelheiten zum Dokumentationsstil und zum Beitragen finden Sie in docs/DOCUMENTATION.md.
Wenn Sie undokumentierte Probleme mit Remill haben, dann bitten Sie im Kanal #binary-lifting des Empire Hacking Slack um Hilfe.
Remill wird auf Linux-Plattformen unterstützt und wurde mit Ubuntu 22.04 getestet. Remill funktioniert auch unter macOS und bietet experimentelle Unterstützung für Windows.
Die Linux-Version von Remill kann für schnellere Tests auch über Docker gebaut werden.
Remill verwendet die folgenden Abhängigkeiten:
| Name | Version |
|---|---|
| Git | Neueste |
| CMake | 3.21+ |
| Ninja | 1+ |
| Google Flags | 52e94563 |
| Google Log | v0.7.1 |
| Google Test | v1.17.0 |
| LLVM | 15+ |
| Clang | 15+ |
| Intel XED | v2025.06.08 |
| Python | 3+ |
Wir bauen das Projekt mit dem Superbuild in dependencies/. Weitere Details zum Abhängigkeitsverwaltungssystem finden Sie unter Remill-Abhängigkeitsverwaltung.
git clone https://github.com/lifting-bits/remill
cd remill
# Step 1: Build dependencies (including LLVM)
cmake -G Ninja -S dependencies -B dependencies/build
cmake --build dependencies/build
# Step 2: Build remill
cmake -G Ninja -B build -DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install -DCMAKE_BUILD_TYPE=Release
cmake --build build
Hinweis: Dies erfordert die Ausführung in einer Visual-Studio-Entwickleraufforderung.
# Step 1: Build dependencies
cmake -G Ninja -S dependencies -B dependencies/build -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build dependencies/build
# Step 2: Build remill
cmake -G Ninja -B build -DCMAKE_PREFIX_PATH:PATH=%CD%/dependencies/install -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Install LLVM via Homebrew
brew install llvm@17
LLVM_PREFIX=$(brew --prefix llvm@17)
# Build dependencies with external LLVM
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON "-DCMAKE_PREFIX_PATH:PATH=$LLVM_PREFIX"
cmake --build dependencies/build
# Build remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Build dependencies with external LLVM
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON
cmake --build dependencies/build
# Build remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build