9.2. Stack

9.2.1. 函数调用

  • 参数入栈,将参数从右到左压入系统栈

  • 返回地址入栈,将当前代码区调用指令的下一条指令压入栈中,供函数返回时执行

  • 代码区跳转,处理区从当前代码区跳转到被调用函数的入口

  • 栈帧调整
    • 保存当前栈帧,EBP入栈

    • 切换到新栈帧,ESP装入EBP

    • 给新栈帧分配空间,ESP减去所需的空间,抬高栈顶

9.2.2. 栈结构

                栈底
          -----------------
          |      ...      |
          |      ...      |
          |      ...      |  较
          |      ...      |  早
          |      ...      |  的
          |      ...      |  帧
          |      ...      |
          |      ...      |
          -----------------
          |      ...      |  调
          |      ...      |  用
          |      ...      |  者
          -----------------  的
+4 + 4n   |     参数n     |  帧
          -----------------
          |      ...      |
          |      ...      |
          |      ...      |
          -----------------
    +8    |     参数1     |
          -----------------
    +4    |    返回地址   |
          -----------------
          |   保存的ebp   |   当
          ----------------- 前
    -4    |     保存的    |  帧
          |     寄存器    |
          |   本地变量    |
          |   临时变量    |
          -----------------
          |  参数构造区域 |
          -----------------
                栈顶