当栈中保存函数调用所需要的维护信息,我们称之为堆栈帧。堆栈帧一般包括以下几个方面的内容:
函数的返回地址和参数
临时变量
函数调用的上下文信息
一个函数的堆栈帧用ebp和esp两个寄存器划定范围
ebp寄存器始终指向当前函数栈帧的栈底。
esp寄存器始终指向当前函数栈帧的栈顶。
堆栈帧是从高地址向低地址增长的。
具体的函数调用过程让我用一个简单的程序并结合画图讲解以增加自己对其过程的深入理解。
int sum(int a, int b) { int tmp = a + b; return tmp; } int main() { int a = 10; int b = 20; int c = sum(a, b); return 0; }画图结合汇编代码分析:
提示:可以放大查看图片,更清晰。