将机器代码翻译成LLVM IR(X86_64的拆卸/重组.X86.ARM到LLVM bitcode)

时间:2011-08-08 12:05:41

标签: translation llvm assembly disassembly opcode

我想将X86_64,x86,ARM可执行文件转换为LLVM IR(反汇编)。

您建议使用什么解决方案?

6 个答案:

答案 0 :(得分:13)

mcsema是一款生产品质的二元升降机。它需要x86和x86-64以及静态"提升"它到LLVM IR。它积极维护,获得BSD许可,并拥有广泛的测试和文档。

https://github.com/trailofbits/mcsema

答案 1 :(得分:11)

考虑使用RevGen中开发的S2E project工具。它允许将x86二进制文件转换为LLVM IR。可以通过url https://dslabgit.epfl.ch/git/s2e/s2e.git 从GIT存储库的Revgen分支中检出源代码。

答案 2 :(得分:10)

关于@ bsa2000提到的 RevGen 工具,这篇最新论文"A compiler level intermediate representation based binary analysis and rewriting system"指出了S2E和Revinc的一些限制。

我把它们拉出来。

  1. 动态翻译的缺点:

      

    S2E [16]和Revnic [14]提出了一种动态转换的方法   使用QEMU的x86到LLVM。与我们的方法不同,这些方法转换   动态LLVM的代码块限制了LLVM的应用   一次仅分析一个区块。

  2. IR不完整:

      

    Revnic [14]和RevGen [15]通过合并翻译来恢复IR   块,但恢复的IR不完整,仅对有效   当前执行;因此,各种整体计划分析将会   提供不完整的信息。

  3. 没有抽象堆栈或宣传信息

      

    此外,翻译后的代码保留了所有的假设   关于堆栈布局的原始二进制文件。他们不提供任何   获取抽象堆栈或促进存储器位置的方法   符号,这对于几个应用是必不可少的   源级分析。

答案 3 :(得分:2)

我怀疑会有通用解决方案(考虑间接分支等),LLVM IR比任何汇编程序都“更高级别”。虽然可以按BB进行翻译。您可能想要检查llvm-qemu和libcpu项目等。

答案 4 :(得分:1)

有一个新项目,处于早期阶段,libbeautyhttps://github.com/jcdutton/libbeauty

关于项目的文章: Libbeauty:另一个反向工程工具,2013年12月24日,Michael Larabel - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU

它现在仅支持x86_64的子集作为输入。项目目标之一是能够将生成的LLVM IR编译回程序集,以获得具有相同功能的二进制文件。

答案 5 :(得分:0)

发布一些关于将ARM二进制文件转换为LLVM IR的参考文献:

解除武装 - 将二进制文件转换为llvm ir反汇编程序

https://code.google.com/p/disarm/

但是,我没有尝试过,因此不确定它的质量和稳定性。其他人可能会发布有关此项目的其他信息吗?