aengelke/rellume
GitHub: aengelke/rellume
Rellume 将 x86-64/AArch64/RISC-V64 机器码提升为可被 LLVM 优化和 JIT 执行的高性能中间表示,解决跨架构二进制翻译与运行时代码优化问题。
Stars: 511 | Forks: 45
# Rellume — 将机器码提升为 LLVM IR
Rellume 是一个将 x86-64/AArch64/RISC-V64 机器码提升为 LLVM IR 的 lifter,主要侧重于提升后代码的性能。生成的 LLVM IR 可以被再次编译和执行,例如使用 LLVM 的 JIT 编译器,理想情况下具有与原始代码相同(甚至更好)的性能。我们特别注意对 SIMD 指令和指针的建模方式,以便优化器能够生成高效的代码。该 lifter 对一组指定的指令进行操作(或自动解码控制流),并创建具有相同语义的 LLVM-IR 函数。这些函数在一个包含虚拟 CPU 状态的通用结构上运行,但可以针对任意的 calling convention 进行封装。
### 使用场景
- 二进制重写:
- 二进制翻译:在利用编译器优化的同时,将机器码翻译为不同的架构。这在 [Instrew](https://github.com/aengelke/instrew) 中已实现。
- 性能提升:针对运行时数据(例如已知的参数或内存位置)进行特化。这在 [BinOpt](https://github.com/aengelke/binopt) 的 LLVM 后端中已实现。
- 插桩:在需要高质量机器码的热代码路径中插入追踪和拦截代码。
- 二进制分析:用于分析 LLVM IR 代码的现有工具可以重新用于二进制代码。
### 示例
有关用法示例,请参阅 `examples/`。
### 相关文献
- Alexis Engelke. Optimizing Performance Using Dynamic Code Generation. Dissertation. Technical University of Munich, Munich, 2021. ([论文](https://mediatum.ub.tum.de/doc/1614897/1614897.pdf))
- Alexis Engelke 与 Martin Schulz. Instrew: Leveraging LLVM for High Performance Dynamic Binary Instrumentation. VEE'20, March 2020. (在提及 Rellume 时,请引用此论文。)
- Alexis Engelke 与 Josef Weidendorfer. Using LLVM for Optimized Light-Weight Binary Re-Writing at Runtime. 载于《第 22 届国际高级并行编程模型与支持环境研讨会 (HIPS 2017) 论文集》. Orlando, US, 2017 ([预印本版 PDF](http://wwwi10.lrr.in.tum.de/~weidendo/pubs/hips17.pdf))
### 许可证
LGPLv2.1+
标签:LLVM, 二进制翻译, 云资产清单, 代码提升, 机器码, 编译器, 逆向工程