
Biblioteca para elevar código máquina a bitcode de LLVM
Remill es un traductor binario estático que traduce instrucciones de código máquina a LLVM bitcode. Traduce código máquina AArch64 (ARMv8 de 64 bits), SPARC32 (SPARCv8), SPARC64 (SPARCv9), x86 y amd64 (incluyendo AVX y AVX512) a LLVM bitcode. El soporte para AArch32 (ARMv8 de 32 bits / ARMv7) está en desarrollo.
Remill se centra en el lifting preciso de instrucciones. Está pensado para ser utilizado como una biblioteca para otras herramientas, por ejemplo, McSema.
Para entender cómo funciona Remill, puedes consultar los siguientes recursos:
Si deseas contribuir, puedes consultar: Cómo contribuir
Genera documentación detallada de la API utilizando 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
Consulta docs/DOCUMENTATION.md para más detalles sobre el estilo de documentación y cómo contribuir.
Si estás experimentando problemas no documentados con Remill, pide ayuda en el canal #binary-lifting del Empire Hacking Slack.
Remill es compatible con plataformas Linux y ha sido probado en Ubuntu 22.04. Remill también funciona en macOS y tiene soporte experimental para Windows.
La versión Linux de Remill también se puede compilar mediante Docker para realizar pruebas más rápidas.
Remill utiliza las siguientes dependencias:
Construiremos el proyecto usando el superbuild en dependencies/. Para más detalles sobre el sistema de gestión de dependencias, consulta Gestión de dependencias de Remill.
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
Nota: Esto requiere ejecutarse desde un símbolo del sistema para desarrolladores de Visual Studio.
# 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
| Nombre | Versión |
|---|
| Git | Última |
| 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+ |