如何解决对齐 x86-64 和 AArch64 调用站点
我想要你的见解。
假设我有一个调用 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 举报,一经查实,本站将立刻删除。