那就简单深入的了解研究一下函数的调用过程。
利用一下一个代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int c = 0;
c = Add(a, b);
printf("%d\n",c);
system("pause");
return 0;
}
其实main函数在_tmainCRTStartup函数中调用的,而_tmainCRTStartup函数是在mainCRTStartup中被调用的。
每一次调用函数都是都是一次过程。
通常称之为:函数的调用过程。
这个过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护,这块栈空间我们称之为函数栈帧。
而栈帧的维护需要ebp和esp两个寄存器,在函数调用的过程中这两个寄存器存放了维护这个栈的栈底和栈顶指针。
ebp存放了指向函数栈帧栈底的地址。
esp存放了指向函数栈帧栈顶的地址。
依靠上面的程序,我们来解析一下。
注:栈帧这部分内容在不同的编译器上实现存在差异,但是思想都是一致的。