欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

小弟我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢

更新时间: 2014-01-05 03:15:59 责任编辑: Author_N1

 

我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢?
C/C++代码通常进入函数的时候会有

push ebp
mov ebp,esp

函数退出的时候

mov esp,ebp
pop ebp
ret

我个人的感觉似乎有esp就够了,函数开始的时候push esp,函数结束的时候pop esp;ret;
这样的话有什么问题呢?

为什么一定要弄个ebp来?
谢谢。
--参考方法--
这是函数局部变量的构造方法。用ebp是为了使用局部变量,因为esp在函数中进行栈操作时是会变的,ebp只是记录了进入函数时栈顶(栈数据为:参数->IP->ebp)位置,当函数有局部变量时,编译器会向下移动esp,为变量预留位置,你在函数中使用局部变量时,编译器会编译成[ebp+XXXX]的形式。若只用esp,当函数内有栈操作时,你怎么去访问局部变量呢?mov esp,ebp;pop ebp;这两条可以用leav代替。
--参考方法--
ESP指向栈顶,EBP指向基址。像楼上所说,ESP加上EBP组合起来能更方便的在会变语言里面使用临时变量。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:15:59
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20220/
本文WWW.DOC100.NET DOC100.NET版权所有。