2019.11.27
前言:张老师在组会上提到了特别新的(2019)一个二进制翻译项目MCTOLL,由2个微软小伙子做的项目,能够把二进制反编译为LLVM IR。MCTOLL的github主页。目前这篇文章还是WIP(Work In Progress)状态。
Raising Binaries to LLVM IR with MCTOLL
全文都没有MCTOLL这个词的含义,从文章的Overview中看出MC是MaChine instructions的简写,
The binary is parsed and the text section is disassembled as a sequence of low-level machine instructions, viz., MCInsts.
所以可以合理地猜测MCTOLL是MaChine instructions TO LLvm ir的意思。
写在前面的总结
文章简单介绍了MCTOLL的工作流程。在理论上没有新颖的地方,完完全全是一个工程项目。那为什么这样的文章还能发到2019 ACM LCTES会议上呢?文章的Conclusion有提及,MCTOLL和近期其他类似项目(将二进制码反编译成LLVM IR)的区别在于MCTOLL只依赖LLVM,没有其他仍和额外的依赖,且提及了5个最近的类似的项目,十分具有参考价值:
- Dagger. 2017. https://github.com/repzret/dagger
- Fracture. 2015. https://github.com/draperlaboratory/fracture
- MCSema. 2019. https://github.com/trailofbits/mcsema
- Rev.ng. 2015. https://github.com/revng/revng
- Bor-Yeh Shen, Wei-Chung Hsu, and Wuu Yang. 2014. A Retargetable Static Binary Translator for the ARM Architecture. ACM Trans. Archit. Code Optim. 11, 2, Article 18 (June 2014), 25 pages. https://doi.org/10. 1145/2629335
其中4和5 (LLBT)我已有所了解,有空可以去看看前三个项目。
文章的内容
MCTOLL的框架
文章里的一张图即可展示MCTOLL的工作流程,
MCTOLL当前的完成进度
- 目前支持Arm32和x64;
- 用
llvm-lit
进行测试; - 暂时不支持32/64转换;
- 暂时不支持windows的COFF二进制文件;
- 暂时不支持C++编译出来的二进制文件;
- 暂时不支持向量指令。
示范MCTOLL运行流程
文章给出来一个例子,将一个简单的阶乘C语言函数片段通过MCTOLL处理。贴出了各个阶段的输出。