littlebot
Published on 2025-04-01 / 7 Visits
0

【源码】基于LLVM的二进制文件提升工具

项目简介

本项目是一个静态(AOT)二进制文件提升工具,能够将X86 - 64和Arm32的Linux/ELF库和可执行文件提升为LLVM IR。当前仅支持Linux/ELF二进制文件的提升,后续有计划扩展到Windows、OS X和C++二进制文件。

项目的主要特性和功能

支持架构

  • X86 - 64
  • Arm32

支持特性

  • 可变参数函数调用(如printf)
  • 函数原型发现
  • 栈帧抽象
  • 跳转表(switch语句)
  • 共享库

已知问题

  • 目前不支持SIMD指令(如SSE、AVX、Neon)
  • 主要测试使用LLVM编译的二进制文件,对GCC编译的代码测试有限

安装使用步骤

假设用户已经下载了本项目的源码文件。

1. 复制LLVM和llvm - mctoll仓库

sh

2. 切换到测试过的LLVM版本

sh git checkout <hash from LLVMVersion.txt>

3. 使用CMake生成Ninja项目并构建llvm - mctoll

sh mkdir build && cd build cmake -G "Ninja" -DLLVM_TARGETS_TO_BUILD="X86;ARM" -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_ENABLE_ASSERTIONS=true -DCMAKE_BUILD_TYPE=Release ../llvm ninja llvm-mctoll && ninja lld

4. 运行单元测试(仅限Linux)

sh ninja check-mctoll

5. 使用llvm - mctoll提升二进制文件

sh llvm-mctoll -d a.out

6. 检查提升后的LLVM IR的正确性

通过使用clang编译提升后的LLVM IR并运行生成的可执行文件来检查其正确性。

参考文献

请在引用此工作时使用以下参考文献: @inproceedings{10.1145/3316482.3326354, author = {Yadavalli, S. Bharadwaj and Smith, Aaron}, title = {Raising Binaries to LLVM IR with MCTOLL (WIP Paper)}, year = {2019}, isbn = {9781450367240}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, url = {https://doi.org/10.1145/3316482.3326354}, doi = {10.1145/3316482.3326354}, booktitle = {Proceedings of the 20th ACM SIGPLAN/SIGBED International Conference on Languages, Compilers, and Tools for Embedded Systems}, pages = {213–218}, numpages = {6}, keywords = {Code Generation, LLVM IR, Binary Translation}, location = {Phoenix, AZ, USA}, series = {LCTES 2019} }

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】