栈是一种后进先出的数据结构,用来维护函数调用过程中的函数内部变量,返回地址和函数的参数等相关信息(存储顺序按函数参数、返回地址、函数内部变量存储)。

函数调用过程_函数调用

 

函数调用时,stack frame(栈帧)首先入栈,同时,EIP寄存器跳转到调用函数的第一条指令。每个stack frame都包含有调用函数的内部变量和返回地址。函数调用完成后,stack frame出栈,同时EIP中存储函数的返回地址。

GDB调试过程中,最后的汇编语句leave和ret指令表示移除stack frame并且将EIP设置为stack frame中保存的函数返回地址,以便继续执行下一步操作。