我正在做一个LLVM项目,旨在将ARM ELF二进制可执行文件反汇编为 MCInst 格式,插入一些指令或进行一些修改,然后重新组装 MCInst 到ELF二进制文件。
我使用llvm-objdump来完成工作的第一部分。但经过长时间的搜索,我仍然无法弄清楚如何将 MCInst 翻译回二进制文件。
有人可以告诉我LLVM的哪个工具或功能对此有用吗?存储中间 MCInst 的最佳方法是什么?例如,将它们存储在内存中或将它们存储在一个文件中,该函数可以以适当的方式存储和读取它们吗?
我非常感谢你的任何帮助,即使只有一点。
答案 0 :(得分:4)
我没有完整的答案,因为您尝试做的事情并未明确地从LLVM公开以供外部使用。但是我确实有一些指针可以让你在阅读一些代码之后找到解决方案。
您要查看的工具是tools/llvm-mc/llvm-mc.cpp
。当它进行汇编时,它会完成解析ASM,从中创建MC级数据结构并将它们发送到ELF文件(或其他文件)的步骤。这些操作在一些辅助类中实现,这些类是非常强耦合的;这就是为什么您需要查看该工具以查看它们如何一致使用的原因。您要查看的主要类是MCAssembler
。它使用“发射器”实际将MCInst
发射成二进制形式。
发射器(自然地)是特定于目标的。例如ARMMCCodeEmitter
等。请注意,二进制的MC级表示不仅仅是MCInst
s。有指令,处理部分的东西等等。这就是研究MCAssembler
所做的事情的重要原因。