9.2. Stack¶
9.2.1. 函数调用¶
参数入栈,将参数从右到左压入系统栈
返回地址入栈,将当前代码区调用指令的下一条指令压入栈中,供函数返回时执行
代码区跳转,处理区从当前代码区跳转到被调用函数的入口
- 栈帧调整
保存当前栈帧,EBP入栈
切换到新栈帧,ESP装入EBP
给新栈帧分配空间,ESP减去所需的空间,抬高栈顶
9.2.2. 栈结构¶
栈底
-----------------
| ... |
| ... |
| ... | 较
| ... | 早
| ... | 的
| ... | 帧
| ... |
| ... |
-----------------
| ... | 调
| ... | 用
| ... | 者
----------------- 的
+4 + 4n | 参数n | 帧
-----------------
| ... |
| ... |
| ... |
-----------------
+8 | 参数1 |
-----------------
+4 | 返回地址 |
-----------------
| 保存的ebp | 当
----------------- 前
-4 | 保存的 | 帧
| 寄存器 |
| 本地变量 |
| 临时变量 |
-----------------
| 参数构造区域 |
-----------------
栈顶