我是靠谱客的博主 踏实糖豆,最近开发中收集的这篇文章主要介绍【ARMv8基础篇】函数调用标准和栈布局,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

????????????博主主页:MuggleZero ????????????

 《ARMv8架构初学者笔记》专栏地址:《ARMv8架构初学者笔记》

前文:

【ARMv8基础篇】异常等级

【ARMv8基础篇】寄存器

Procedure Call Standard for the Arm 64-bit Architecture.pdf是ARM64架构函数调用的标准和规范文档,宝藏网页如下所示:

Releases · ARM-software/abi-aa · GitHub

函数调用标准(PCS)用于描述父子函数的编译连接过程,尤其是父函数和子函数的调用的约定,如栈的布局参数的传递等等。ARM64的通用寄存器如下图所示:

在ARM64架构中,栈从高地址往低地址生长。栈的起始地址是栈底,低地址是栈顶。这个栈顶和我们平时认知中的栈顶是反的,主要还是因为栈的向下生长。下图是栈帧布局的一个示意图,假设目前有个caller,它会调用callee,这个时候栈指针会向下延伸一段,为callee创建一个栈帧布局,callee中的一些局部变量会存在这个callee的栈帧里。当callee返回时,栈指针会跳回caller的栈顶即caller的SP位置,于是callee的栈空间就被释放了。

ARM64架构函数帧布局的关键点:

  • 所有函数调用栈都会组成一个单链表

  • 每个栈由两个地址构成这个链表,位于栈的底部。

    • 低地址存放

      指向上一个栈帧的栈基地址FP,类似于链表的prev指针

    • 高地址存放

      当前函数的返回地址,进入该函数时LR的值。

  • 函数返回时,ARM64先把栈中的LR值载入当前LR寄存器,然后执行ret指令。

欢迎关注我的个人微信公众号,一起交流学习嵌入式开发知识!

关注「求密勒实验室」

最后

以上就是踏实糖豆为你收集整理的【ARMv8基础篇】函数调用标准和栈布局的全部内容,希望文章能够帮你解决【ARMv8基础篇】函数调用标准和栈布局所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部