1

我正在做一个 LLVM 项目,旨在将 ARM ELF 二进制可执行文件反汇编为MCInst格式,插入一些指令或进行一些修改,然后将MCInst重新组装为ELF 二进制文件。

我使用 llvm-objdump 来完成工作的第一部分。但是搜索了很长时间后,我仍然无法弄清楚如何将MCInst 转换回二进制文件。

谁能告诉我 LLVM 的哪个工具或功能对此有用?存储中间MCInst的最佳方法是什么?例如,将它们存储在内存中或将它们存储在文件中,哪个函数可以以体面的方式存储和读取它们?

我非常感谢您的任何帮助,即使只是一点。

4

1 回答 1

4

我没有完整的答案,因为您尝试做的事情没有明确地从 LLVM 公开以供外部使用。但是我确实有一些指示,可以在阅读一些代码后引导您找到解决方案。

您要查看的工具是tools/llvm-mc/llvm-mc.cpp. 当它进行汇编时,它会执行解析 ASM、从中创建 MC 级数据结构并将它们发送到 ELF 文件(或其他文件)的步骤。这些动作是在一些辅助类中实现的,它们耦合性很强;这就是为什么您需要查看该工具以了解它们是如何统一使用的。您要查看的主要课程是MCAssembler. 它使用“发射器”将MCInsts 实际发射为二进制形式。

发射器(自然)是特定于目标的。例如ARMMCCodeEmitter,等等。请注意,二进制的 MC 级表示不仅MCInst是 s。有指令,处理部分的东西等等。这就是为什么研究什么是重要的MCAssembler

于 2013-09-23T22:45:15.697 回答