ARM64的函数调用标准和栈布局

欢迎订阅奔跑吧linux社区微信公众号
本文节选自《奔跑吧Linux内核》第二版卷1第1.6章

函数调用标准(Procedure Call Standard,PCS)用来描述父/子函数是如何编译、链接的,特别是父函数和子函数之间调用关系的约定,如栈的布局、参数的传递等。每个处理器架构都有不同的函数调用标准,本章重点介绍ARM64的函数调用标准。
ARM公司有一份描述ARM64架构函数调用的标准和规范文档,这份文档是《Procedure Call Standard for ARM 64-Bit Architecture》。
ARM64架构的通用寄存器如表1.25所示。

图片

在ARM64体系结构中,栈是从高地址往低地址生长。栈的起始地址称为栈底,而栈从高地址往低地址延伸到某个点称为栈顶。栈在函数调用过程中起到非常重要的作用,包括存储函数使用的局部变量、传递参数等。在函数调用过程中,栈是逐步生成的。为单个函数分配的栈空间,即从该函数栈底(高地址)到栈顶(低地址)这段空间称为栈帧(Stack Frame)。

例如父函数main()调用子函数func1(),那么在准备执行子函数func1()时,栈指针SP会向低地址延伸一段(从父函数的栈框最低地址往下延伸),为func1()创建一个栈帧。func1()使用到的一些局部变量会存储在这个栈帧里。当从func1()返回时,栈指针SP会调整回父函数的栈顶ÿ

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值