一·指令
sp:用来保存栈底的寄存器
ldr:把数据从内存读出来,写入寄存器
str:把数据从寄存器读出来,写入内存
二·实现
我们新建一个Xcode项目,创建一个新的.s文件。如下
三·通过LLDB和内存查看栈空间
我们需要特别关注sp,x0,x1 寄存器的变化
当我们执行函数A时:sp指向A函数的栈空间底部
此时x1 x0还未被赋值都为0x00b
当我们利用LLDB继续向下指向函数跳转到B函数时,修改x0的值,查看内存变化
我们得到了 跳转后的sp指针地址
再通过memoy read sp得到内存空间
由于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栈底指针处