EIP,EBP,ESP都是系统的寄存器,里面存的都是些地址。
为什么要说这三个指针,是因为我们系统中栈的实现上离不开他们三个。
我们DC上讲过栈的数据结构,主要有以下特点:
后进先处。(这个强调过多)
其实它还有以下两个作用:
1.栈是用来存储临时变量,函数传递的中间结果。
2.操作系统维护的,对于程序员是透明的。
我们可能只强调了它的后进先出的特点,至于栈实现的原理,没怎么讲?下面我们就通过一个小例子说说栈的原理。
先写个小程序:
void fun(void)
{
printf("hello world");
}
void main(void)
{
fun()
printf("函数调用结束");
}
这是一个再简单不过的函数调用的例子了。
当程序进行函数调用的时候,我们经常说的是先将函数压栈,当函数调用结束后,再出栈。这一切的工作都是系统帮我们自动完成的。
但在完成的过程中,系统会用到下面三种寄存器:
1.EIP
2.ESP
3.EBP
当调用fun函数开始时&#