微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对齐 x86-64 和 AArch64 调用站点

如何解决对齐 x86-64 和 AArch64 调用站点

我想要你的见解。 假设我有一个调用 main函数 foo。假设我为 x86-64AArch64 编译了相同的代码。并且函数符号位于两个二进制文件中的相同(虚拟)地址。 例如,对于 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>
  ...

我还想以某种方式对齐调用站点,即 50108f50108c,以便 foo 返回后的返回地址相同。

我正在尝试修改两个目标的 LLVM 后端,并认为也许我可以覆盖一个生成调用站点MCInst 方法,并在两个调用站点之一之前添加一些填充(使用 nop),在以对齐它们。

但是,我不确定这是否是要走的路,并且正在寻找想法。另外,我知道有 MCCodePadder 可以处理我的指令的填充,但我仍然不确定一个后端(x86-64)如何获得另一个发出的地址位置的信息后端 (AArch64)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。