ARMv8 函数调用栈解析设计概述

本文介绍了ARMv8体系结构中函数调用栈的概念和管理方式,包括函数调用时的栈空间分配、返回地址的保存以及调用栈在函数运行过程中的动态管理。调用栈解析对于系统错误分析和问题定位具有重要意义,文章探讨了如何进行调用栈解析设计,特别是函数返回地址的获取和关键指令的识别。
摘要由CSDN通过智能技术生成

> 调用栈解析概念:

       任意体系结构的CPU,都设计了一套通用寄存器、状态寄存器及其他控制寄存器,用以维系系统的正常运行。函数调用过程中,CPU一般都需要处理几件事情:保存母函数现场(寄存器值),将被调用函数的返回地址存储到相应的寄存器中(MIPS ra寄存器,ARM的LR寄存器),以确保被调用函数执行结束后,系统可重新跳转回正确的位置,并可拥有正确的执行环境继续运行。由于CPU通用寄存器甚至状态寄存器在不同的函数间是复用的,这就决定了在函数调用过程中需要将当前的CPU状态临时保存到一段存储空间里,并在被调用函数返回后从存储空间取出相应的数据恢复CPU状态上下文。

       用于存储CPU状态的空间为堆栈stack,函数调用过程中用来保存CPU状态的存储空间就叫调用栈。

ARM体系结构对64位的支持从ARMV8开始,V7及以前的版本并不支持。V8的寄存器及指令集都发生了较大的变化,导致V7之前版本的调用栈解析工具不再可用,需要或从新设计实现一套。

 

Ø      调用栈Q&A

Q1: 收否所有函数都有调用栈?

    并非所有函数都有调用栈,例如层次关系最深的函数,就可以直接使用CPU状态,而不需要关心调用栈。可以把有调用栈的函数称为非叶子函数,而无调用栈的则称为叶子函数

Q2:正常情况下是否需要感知函数调用栈

    不需要。调用栈无处不在,但一般情况下程序员不感知其存在。

Q3:调用栈的内存管理是怎样的的

       调用栈位于系统的栈section内,一般大多数系统里栈都是低地

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值