Remill是一个静态二进制翻译器,它将机器代码指令转换为LLVM位码。它支持AArch64(64位ARMv8)、SPARC32(SPARCv8)、SPARC64(SPARCv9)、x86和amd64机器代码(包括AVX和AVX512)到LLVM位码的翻译。AArch32(32位ARMv8 / ARMv7)支持正在开发中。
Remill专注于精确地提升指令。它旨在作为其他工具(例如McSema)的库使用。
要了解Remill的工作原理,你可以查看以下资源:
如果你希望贡献代码,可以查看:如何贡献
使用Doxygen生成详细的API文档:
# 安装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文档未覆盖的问题,请在Empire Hacking Slack的#binary-lifting频道中寻求帮助。
Remill支持Linux平台,并在Ubuntu 22.04上进行了测试。Remill也可在macOS上运行,并且对Windows提供实验性支持。
Remill的Linux版本还可以通过Docker构建,以便快速测试。
Remill使用以下依赖项:
| 名称 | 版本 |
|---|---|
| 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+ |
我们将使用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
# 通过Homebrew安装LLVM
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