lifting-bits/remill

GitHub: lifting-bits/remill

Remill 是一个将多种架构的机器码精确翻译为LLVM bitcode的静态二进制翻译库,为安全研究提供底层支撑。

Stars: 1657 | Forks: 175

# Remill [![Slack 聊天](http://slack.empirehacking.nyc/badge.svg)](https://slack.empirehacking.nyc/)

Remill 是一个静态二进制翻译器,它将机器码指令翻译为 [LLVM bitcode](http://llvm.org/docs/LangRef.html)。它可以将 AArch64 (64-bit ARMv8)、SPARC32 (SPARCv8)、SPARC64 (SPARCv9)、x86 和 amd64 机器码(包括 AVX 和 AVX512)翻译为 LLVM bitcode。AArch32 (32-bit ARMv8 / ARMv7) 支持正在开发中。 Remill 专注于精确地提升指令。它旨在作为其他工具的库来使用,例如 [McSema](https://github.com/lifting-bits/mcsema)。 ## 构建状态 [![构建状态](https://img.shields.io/github/actions/workflow/status/lifting-bits/remill/.github/workflows/build.yml)](https://github.com/lifting-bits/remill/actions/workflows/build.yml) ## 文档 要了解 Remill 的工作原理,您可以查看以下资源: - [关于 Remill 如何提升指令的分步指南](docs/LIFE_OF_AN_INSTRUCTION.md) - [如何实现指令的语义](docs/ADD_AN_INSTRUCTION.md) - [Remill 的设计与架构](docs/DESIGN.md) 如果您想做出贡献,可以查看:[如何贡献](docs/CONTRIBUTING.md) ### API 文档 使用 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](docs/DOCUMENTATION.md)。 ## 获取帮助 如果您在使用 Remill 时遇到未记录的问题,请在 [Empire Hacking Slack](https://slack.empirehacking.nyc/) 的 `#binary-lifting` 频道中寻求帮助。 ## 支持的平台 Remill 支持在 Linux 平台上使用,并已在 Ubuntu 22.04 上进行了测试。Remill 也可在 macOS 上运行,并对 Windows 提供实验性支持。 Remill 的 Linux 版本也可以通过 Docker 构建以便更快地进行测试。 ## 依赖项 Remill 使用以下依赖项: | 名称 | 版本 | | ---- | ------- | | [Git](https://git-scm.com/) | 最新版 | | [CMake](https://cmake.org/) | 3.21+ | | [Ninja](https://ninja.build) | 1+ | | [Google Flags](https://github.com/google/glog) | `52e94563` | | [Google Log](https://github.com/google/glog) | v0.7.1 | | [Google Test](https://github.com/google/googletest) | v1.17.0 | | [LLVM](http://llvm.org/) | 15+ | | [Clang](http://clang.llvm.org/) | 15+ | | [Intel XED](https://github.com/intelxed/xed) | v2025.06.08 | | [Python](https://www.python.org/) | 3+ | ## 获取并构建代码 我们将使用 `dependencies/` 中的 superbuild 来构建项目。有关依赖项管理系统的更多详细信息,请参阅 [Remill 依赖项管理](docs/DEPENDENCIES.md)。 ### 克隆仓库 ``` git clone https://github.com/lifting-bits/remill cd remill ``` ### Linux/macOS ``` # 第 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 ``` ### Windows (需要 clang-cl) **注意**:这需要从 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 的 macOS: ``` # 通过 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 的 Linux: ``` # 使用外部 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 ```
标签:AArch64, AMD64, AVX, Bash脚本, Bitcode, LLVM中间代码, McSema, SPARC, x86, 二进制分析, 二进制安全, 二进制改写, 云安全监控, 云安全运维, 云资产清单, 代码抽象, 动态二进制分析工具, 可配置连接, 恶意代码分析, 指令集架构, 机器码提升, 程序分析, 符号执行, 编译器基础设施, 逆向工具, 逆向工程, 配置文件, 静态二进制翻译, 静态分析