栈帧也就是函数的具体调用过程:函数的调用,参数的传递,函数执行完之后的返回等等!
我们先来一段简单的c语言代码:
#include <stdio.h>
#include <windows.h>
int add(int A,int B)
{
int z = A + B;
return z;
}
int main()
{
int a = 0xAAAAAAAA;
int b = 0xBBBBBBBB;
int ret = add(a,b);
printf("ret = %d\n",ret);
system ("pause");
return 0;
}
这是一段简单的c语言程序,不做解释,我们主要来看看调用add函数的具体过程。
在具体介绍之前,我们给出一些概念:
通用寄存器:EAX,EBX,ECX,EDX。
EIP(pc):程序计数器,用来存放将要执行代码的地址。
EBP:栈底。
ESP:栈顶。