如何用栈来管理函数调用
每个函数执行前都有一个起始位置(即被调用的位置,存放在 CPU 的 ebp 寄存器中);当函数开始执行后,会有一个栈顶位置(即执行到当前位置栈里存放的临时变量,存放在 CPU 的 ebp 寄存器中)。
在函数被调用的时候,首先将当前函数的起始位置压住栈中,将 ebp 存放的指针指向这个位置,然后开始执行被调函数,随着被调函数的执行,不断有变量入栈,esp 指针也不断变换。
当函数执行完成,将 esp 指回 ebp 的位置(即将 ebp 的值赋给 esp),这样被调函数的帧栈就被清空释放了,然后将当前函数的起始位置(esp 当前指向的地址)赋给 ebp,这样就完成了“场景还原”。