前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARM64下的函数sp指令调用栈操作

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

原创
作者头像
Wilbur-L
修改2021-01-29 17:56:16
2.4K0
修改2021-01-29 17:56:16
举报
文章被收录于专栏:iOS底层原理iOS底层原理

一·指令

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

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

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

二·实现

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

汇编代码
汇编代码

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

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

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

sp栈底指针
sp栈底指针

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

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

sp
sp
跳转
跳转

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

sp
sp

再通过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栈底指针处

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一·指令
  • 二·实现
  • 三·通过LLDB和内存查看栈空间
  • 四·结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档