
Библиотека для подъема машинного кода в LLVM биткод
Remill — это статический бинарный транслятор, который переводит инструкции машинного кода в LLVM bitcode. Он транслирует машинный код AArch64 (64-битная ARMv8), SPARC32 (SPARCv8), SPARC64 (SPARCv9), x86 и amd64 (включая AVX и AVX512) в LLVM bitcode. Ведётся работа над поддержкой AArch32 (32-битная ARMv8 / ARMv7).
Remill фокусируется на точном подъёме инструкций. Он предназначен для использования в качестве библиотеки для других инструментов, например McSema.
Чтобы понять, как работает Remill, вы можете ознакомиться со следующими ресурсами:
Если вы хотите внести свой вклад, ознакомьтесь с: Как внести вклад
Сгенерируйте подробную документацию API с помощью Doxygen:
# Установка Doxygen (macOS)
brew install doxygen graphviz
# Установка Doxygen (Ubuntu/Debian)
sudo apt-get install doxygen graphviz
# Генерация документации
doxygen
# Откройте docs/doxygen/html/index.html в вашем браузере
См. docs/DOCUMENTATION.md для получения дополнительных сведений о стиле документации и участии.
Если вы испытываете недокументированные проблемы с Remill, обратитесь за помощью в канал #binary-lifting в Empire Hacking Slack.
Remill поддерживается на платформах Linux и был протестирован на Ubuntu 22.04. Remill также работает на macOS и имеет экспериментальную поддержку Windows.
Версию Remill для Linux также можно собрать через Docker для более быстрого тестирования.
Remill использует следующие зависимости:
Мы будем собирать проект с помощью суперсборки в dependencies/. Для получения дополнительных сведений о системе управления зависимостями см. Управление зависимостями Remill.
git clone https://github.com/lifting-bits/remill
cd remill
# Шаг 1: Сборка зависимостей (включая LLVM)
cmake -G Ninja -S dependencies -B dependencies/build
cmake --build dependencies/build
# Шаг 2: Сборка remill
cmake -G Ninja -B build -DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install -DCMAKE_BUILD_TYPE=Release
cmake --build build
Примечание: Это необходимо выполнять из командной строки разработчика Visual Studio.
# Шаг 1: Сборка зависимостей
cmake -G Ninja -S dependencies -B dependencies/build -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build dependencies/build
# Шаг 2: Сборка 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
# Установка LLVM через Homebrew
brew install llvm@17
LLVM_PREFIX=$(brew --prefix llvm@17)
# Сборка зависимостей с внешним LLVM
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON "-DCMAKE_PREFIX_PATH:PATH=$LLVM_PREFIX"
cmake --build dependencies/build
# Сборка remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Сборка зависимостей с внешним LLVM
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON
cmake --build dependencies/build
# Сборка remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build
| Имя | Версия |
|---|
| Git | Последняя |
| 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+ |