自动更正手动修改的反汇编程序集地址的工具

tool to auto-correct addresses of manually modified disassembled assembly

我有一个 .obj 并且我放弃了assemble它(我没有原始源文件)。

我通过在某些感兴趣的指令中插入我自己的程序集来修改生成的程序集文件,注意 push/pop 我使用的堆栈寄存器,这样我就不会破坏原始内容。

为什么?也许我想在执行某个汇编指令时切换一个引脚(实时,即没有 debugger/JTAG)。

然后,我想assemble它回到.obj,但由于我插入了自己的程序集,现在分支的相对地址不正确。

问题

是否有 ARM 工具可以自动更正相对地址,或者我必须在插入程序集时手动执行此操作?

这是针对 ARM Cortex M4 的,但我认为这无关紧要。

使用为分支目标插入标签的反汇编程序。对于 x86,Agner Fog 的 objconv 反汇编程序执行此操作 (sample output)。

为 ARM 寻找类似的东西,这样你就可以得到可以重新组装和链接的 asm 输出,并重新计算寻址。 (如果存在 IDK,但也许您可以将其破解到现有的反汇编程序之一中。)

但请注意,插入新代码不仅会影响分支指令。任何将静态地址作为立即数的代码都会受到数据布局更改的影响。在 ARM 上,常量通常从附近的文字池中加载与 PC 相关的负载,因此这些常量也需要使用标签。