9.2. Stack

9.2.1. 函数调用

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

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

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

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

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

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

9.2.2. 栈结构

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