问题描述
我想要你的见解。
假设我有一个调用 main
的函数 foo
。假设我为 x86-64
和 AArch64
编译了相同的代码。并且函数符号位于两个二进制文件中的相同(虚拟)地址。
例如,对于 x86-64
:
0000000000501060 <main>:
501060: 55 push rbp
501061: 48 89 e5 mov rbp,rsp
501064: 48 83 ec 10 sub rsp,0x10
...
50108f: e8 9c ff ff ff call 501030 <foo>
...
对于AArch64
:
0000000000501060 <main>:
501060: d10083ff sub sp,sp,#0x20
501064: a9017bfd stp x29,x30,[sp,#16]
...
50108c: 97ffffe9 bl 501030 <foo>
...
我还想以某种方式对齐调用站点,即 50108f
和 50108c
,以便 foo
返回后的返回地址相同。
我正在尝试修改两个目标的 LLVM 后端,并认为也许我可以覆盖一个生成调用站点的 MCInst
方法,并在两个调用站点之一之前添加一些填充(使用 nop),在以对齐它们。
但是,我不确定这是否是要走的路,并且正在寻找想法。另外,我知道有 MCCodePadder
可以处理我的指令的填充,但我仍然不确定一个后端(x86-64
)如何获得另一个发出的地址位置的信息后端 (AArch64
)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)