ARM64 / Android:编译器使用SP代替X29作为基本框架指针

时间:2019-05-17 08:26:39

标签: assembly android-ndk inline-assembly arm64

我必须将参数压入堆栈以将参数传递给函数。但是,Android NDK编译器的clang(64位)始终使用sp寄存器作为到达变量的基地址,而应使用x29(基帧指针)。

我有ldr w11, [sp, #0x30],我想要ldr w11, [x29, #0x30]

这使我感到困扰,因为如果我将asm注入我的c代码sub sp, sp, x9中以推送参数,则会打扰所有使用旧sp的引用。

您知道为什么它不使用x29吗,如果我可以强迫它这样做吗?

直到现在,我的想法是将参数写在sp指针下而不移动它,完成后,在调用该函数之前将sp移动。然后,将sp恢复到原来的值。

我不确定在sp下方写数据是一个好主意,您对此有何看法?

  

其他信息:有一个明显的复杂之处:无法安全访问架构sp下方(但在堆栈区域中)的内存。值得注意的是,此区域由异步执行(如中断)的信号处理程序使用。如果我们仅将sp复制到其他寄存器并开始将其用作(递减)堆栈指针,则我们的特殊堆栈区域最终将被破坏。 https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/using-the-stack-in-aarch64-implementing-push-and-pop

0 个答案:

没有答案