+ -
当前位置:首页 → 问答吧 → ebp和esp细解

ebp和esp细解

时间:2010-08-31

来源:互联网

看stack frame的时候老是对ebp,esp这两个弄混,请大牛讲讲

作者: pengjianbokobe   发布时间: 2010-08-31

esp是栈指针,是CPU机制决定的,push、pop指令会自动调整esp的值

又因为函数的参数和局部变量,其实是与进入函数那时的esp相关的,但由于esp在函数运行中会不停的变,
因此保存当前esp到一个ebp中保持不变,后续用ebp来访问参数和局部变量就很清楚。
而且还方便于调试器分析函数调用过程中的堆栈情况。

这个ebp也不是必须的,实际esp虽然不停在变,但具体变化编译器是可以编译其计算出来的,因此直接使用esp来访问局部变量和参数也是可行的。gcc有个编译参数 -fomit-frame-pointer 就是干这个事的

作者: drangon   发布时间: 2010-08-31

ls大牛牛解释的很清楚了

作者: gtv   发布时间: 2010-08-31

反了吧,印象中GCC是把ebp当备用,esp直接操作,最后不是还leave一下。。。。。。

作者: tempname2   发布时间: 2010-08-31