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 就是干这个事的
又因为函数的参数和局部变量,其实是与进入函数那时的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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28