关于栈帧
来源:互联网 发布:电脑端口怎么关闭 编辑:程序博客网 时间:2024/05/25 23:57
每个函数调用的时候都有自己独立的一块栈帧,这个栈帧中维持着各种各样的信息。寄存器esp指向当前栈帧的顶部,也就是低地址。所以我们需要想象的是一个很长的木头,木头被编了号码,esp则指向了号码较低的区域。 所以可以想象每个函数都有它自己的那一块木头,这时候问题来了,如果一个函数中有调用别的函数时怎么办,这需要从一个木头跳到另外一块木头,比如
main函数的栈帧也即是它的木头处。让被调用函数的参数压栈,然后调用该函数,使用
mov ebp,esp
ebp入栈,实际上是让main函数的栈顶却不需要保存,因为,这个栈顶跟新函数栈帧的底部刚好相邻。这时的栈帧如图:
如图:
func函数返回时,我们执行pop ebp。这样ebp,再弹出返回地址到esp跟main函数的栈帧。 所以理解这个的关键点就在于,理解新的栈帧建立的这个过程。新的栈帧地址是怎么产生的?就是sub esp,
ebp我们可以理解成一个段的基地址,也就是一个栈中地址最高的地方,指向栈底部,至于这个段是神马?可以想象成每个函数都有自己的一个”,也就是有自己的一个esp,而当一个函数调用另外一个函数的时候,我们需要从自己的段跳到别的函数的段,所以跳转之前,必须保存好自己的段的基地址,也就是push ebp最后都有一个ebp的不会变化,而esp记录了当前函数执行到跳转之前的情况,eip压栈。这样等别的函数返回之后,保存的ebp的值会帮祝我们自己的段里继续执行下面的指令。
http://blog.csdn.net/yxysdcl/article/details/5569351
http://www.yuanma.org/data/2009/0401/article_3599.htm
http://hi.baidu.com/lyricidyll/blog/item/dc8ff8fbe8ce71879e5146fe.html这个有更详细的讲解
http://www.yuanma.org/data/2009/0401/article_3599.htm
- 关于栈帧
- 关于栈帧
- 关于栈帧
- 关于调用帧中的栈
- 关于栈
- 关于栈帧的几个贴子。
- 关于栈帧的两道题型
- 14 关于栈帧(修改)
- C语言·关于栈帧
- 关于帧缓冲
- 关于ios帧动画
- 关于掉帧问题
- 关于帧率
- 关于帧布局
- 关于帧率
- 关于html分帧
- 关于协议栈
- 关于堆与栈
- javascript base64编码解码(汉字正常,但文件较大)
- 动态添加行
- JS调用方法规则
- 看完《python简明教程》笔记及第一个python程序
- 黑马程序员:java高级IO 1
- 关于栈帧
- 驱动和用户程序间共享内存
- Android网络相关
- 如何创建一个window 服务
- ASCII码表在线查询(1.0 beta 1)(转自:http://www.weste.net/tools/ASCII.asp)
- Android网络相关
- .htaccess的重写规则 .htaccess基本语法和应用
- ASCII码表在线查询(1.0 beta 1)(转自:http://www.weste.net/tools/ASCII.asp)
- .htaccess的重写规则 .htaccess基本语法和应用