Grz*_*cki 27 assembly translation llvm opcode disassembly
我想将X86_64,x86,ARM可执行文件转换为LLVM IR(反汇编).
你建议什么解决方案?
Dan*_*Dan 13
mcsema是一个生产质量的二元升降机.需要x86和x86-64并静态"提升"到LLVM IR.它得到了积极维护,获得了BSD许可,并拥有广泛的测试和文档.
https://github.com/trailofbits/mcsema
bsa*_*000 11
考虑使用S2E项目中开发的RevGen工具.它允许将x86二进制文件转换为LLVM IR.可以通过url https://dslabgit.epfl.ch/git/s2e/s2e.git从GIT存储库的Revgen分支中检出源代码.
Hac*_*one 10
关于@ bsa2000提到的RevGen工具,这篇最新论文"基于编译器级中间表示的二进制分析和重写系统"指出了S2E和Revinc的一些局限性.
我把它们拉出来
动态翻译的缺点:
S2E [16]和Revnic [14]提出了一种使用QEMU将x86动态转换为LLVM的方法.与我们的方法不同,这些方法可以动态地将代码块转换为LLVM,从而将LLVM分析的应用限制为一次只有一个块.
IR不完整:
Revnic [14]和RevGen [15]通过合并已翻译的块来恢复IR,但恢复的IR不完整,仅对当前执行有效; 因此,各种整个程序分析将提供不完整的信息.
没有抽象堆栈或促销信息
此外,翻译的代码保留了关于堆栈布局的原始二进制的所有假设.它们不提供任何获取抽象堆栈或将符号提升到符号的方法,这对于应用多个源级分析至关重要.
我怀疑是否会有通用的解决方案(考虑间接分支等),LLVM IR 比任何汇编器都“更高级别”。虽然可以按每个 BB 进行翻译。您可能需要检查 llvm-qemu 和 libcpu 项目等。