ARM64下的函数sp指令调用栈操作

2021-01-29 17:56:16 浏览数 (1)

一·指令

sp:用来保存栈底的寄存器

ldr:把数据从内存读出来,写入寄存器

str:把数据从寄存器读出来,写入内存

二·实现

我们新建一个Xcode项目,创建一个新的.s文件。如下

汇编代码汇编代码

三·通过LLDB和内存查看栈空间

我们需要特别关注sp,x0,x1 寄存器的变化

当我们执行函数A时:sp指向A函数的栈空间底部

sp栈底指针sp栈底指针

此时x1 x0还未被赋值都为0x00b

当我们利用LLDB继续向下指向函数跳转到B函数时,修改x0的值,查看内存变化

spsp
跳转跳转

我们得到了 跳转后的sp指针地址

spsp

再通过memoy read sp得到内存空间

修改的x0修改的x0

由于0xb在内存地址中不明显,我们修改它让它成为一个特征值,修改x0的值我们可以发现内存地址是从地往高处写的

比较A函数sp地址:0x16f1b7820

跳转到B时:16F1B7836处写的FF值

四·结论

栈空间栈空间

汇编代码解释:

sub sp,sp #0x30 拉伸栈空间

stp x0,x1,[sp,#0x10]

ldp x1,x0,[sp,#0x10]

add sp,sp,#0x30 回缩栈空间 返回A函数sp栈底指针处

0 人点赞