ARM 栈帧
本系列均以 imx6ul 的 cortex-A7(armv7-a) 为例
在 ARM 中,通常为满减栈(Full Descending FD), 也就是说,堆栈指针指向堆栈内存中最后一个填充的位置,并且随着每个新数据项被压入堆栈而递减。
栈的本质
要理解栈的本质,首先得明白,程序执行是怎么执行的?
程序执行其实就是对应一个又一个状态机,在 A 状态有对应的内核寄存器,在 B 状态也有对应的内核寄存器值。
A 状态切换到 B 状态,就需要把 A 状态的内核寄存器保存下来,不然无法从 B 状态再回到 A 状态。此时就需要将 A 状态下内核寄存器的值放到内存中,即入栈
B 状态切换到 A 状态,需要恢复 A 状态的现场,即内核寄存器的值,所以需要将存到内存中的数据写回到内核寄存器,即出栈
其实 linux/rtos 的任务也是一个又一个状态机,状态切换的时候,先将当前状态(A)的内核寄存器保存到内存中,再把下一个状态(B)的内核寄存器从内存中读回来,程序跳转到 B 状态执行,其实这就是上下文切换的过程。
入栈/出栈的本质其实就是内存中的一块区域进行操作:
- 需要入栈的时候,就把内核寄存器的值
本文深入探讨了ARMv7-A架构中的栈帧,重点介绍了满减栈(Full Descending, FD)的工作原理。通过阐述栈的本质——状态机间的切换,解释了入栈和出栈过程,以及如何保存和恢复内核寄存器。文中通过示例和GDB调试技巧详细展示了栈帧的操作,并给出了实际的汇编代码。"
135245890,8078297,Dependency Track:智能组件风险分析与管理,"['软件供应链安全', '组件分析工具', '漏洞管理', 'CICD集成', '开源风险管理']
订阅专栏 解锁全文
539

被折叠的 条评论
为什么被折叠?



