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个最近的类似的项目,十分具有参考价值:

  1. Dagger. 2017. https://github.com/repzret/dagger
  2. Fracture. 2015. https://github.com/draperlaboratory/fracture
  3. MCSema. 2019. https://github.com/trailofbits/mcsema
  4. Rev.ng. 2015. https://github.com/revng/revng
  5. 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

MCTOLL当前的完成进度

  • 目前支持Arm32和x64;
  • llvm-lit进行测试;
  • 暂时不支持32/64转换;
  • 暂时不支持windows的COFF二进制文件;
  • 暂时不支持C++编译出来的二进制文件;
  • 暂时不支持向量指令。

示范MCTOLL运行流程

文章给出来一个例子,将一个简单的阶乘C语言函数片段通过MCTOLL处理。贴出了各个阶段的输出。