
Libreria per il lifting di codice macchina in bitcode LLVM
Remill è un traduttore binario statico che traduce istruzioni di codice macchina in LLVM bitcode. Traduce codice macchina AArch64 (ARMv8 a 64 bit), SPARC32 (SPARCv8), SPARC64 (SPARCv9), x86 e amd64 (incluse le estensioni AVX e AVX512) in LLVM bitcode. Il supporto per AArch32 (ARMv8 a 32 bit / ARMv7) è in corso di sviluppo.
Remill si concentra sul sollevamento accurato delle istruzioni. È pensato per essere usato come libreria per altri strumenti, ad esempio McSema.
Per capire come funziona Remill puoi consultare le seguenti risorse:
Se desideri contribuire, puoi dare un'occhiata a: Come contribuire
Genera una documentazione API dettagliata usando Doxygen:
# Installa Doxygen (macOS)
brew install doxygen graphviz
# Installa Doxygen (Ubuntu/Debian)
sudo apt-get install doxygen graphviz
# Genera la documentazione
doxygen
# Apri docs/doxygen/html/index.html nel tuo browser
Vedi docs/DOCUMENTATION.md per maggiori dettagli sullo stile della documentazione e sui contributi.
Se riscontri problemi non documentati con Remill, chiedi aiuto nel canale #binary-lifting della Empire Hacking Slack.
Remill è supportato su piattaforme Linux ed è stato testato su Ubuntu 22.04. Remill funziona anche su macOS e ha un supporto sperimentale per Windows.
La versione Linux di Remill può essere compilata anche tramite Docker per test più rapidi.
Remill utilizza le seguenti dipendenze:
| Nome | Versione |
|---|---|
| Git | Ultima |
| 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+ |
Compileremo il progetto usando la superbuild in dependencies/. Per maggiori dettagli sul sistema di gestione delle dipendenze, vedi Gestione delle dipendenze di Remill.
git clone https://github.com/lifting-bits/remill
cd remill
# Passo 1: Compila le dipendenze (incluso LLVM)
cmake -G Ninja -S dependencies -B dependencies/build
cmake --build dependencies/build
# Passo 2: Compila remill
cmake -G Ninja -B build -DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install -DCMAKE_BUILD_TYPE=Release
cmake --build build
Nota: Questo richiede l'esecuzione da un prompt per sviluppatori di Visual Studio.
# Passo 1: Compila le dipendenze
cmake -G Ninja -S dependencies -B dependencies/build -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build dependencies/build
# Passo 2: Compila 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
# Installa LLVM tramite Homebrew
brew install llvm@17
LLVM_PREFIX=$(brew --prefix llvm@17)
# Compila le dipendenze con LLVM esterno
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON "-DCMAKE_PREFIX_PATH:PATH=$LLVM_PREFIX"
cmake --build dependencies/build
# Compila remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Compila le dipendenze con LLVM esterno
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON
cmake --build dependencies/build
# Compila remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build