汇编指令ebp与esp的关系与作用
来源:互联网 发布:改变 知乎 编辑:程序博客网 时间:2024/06/16 07:35
可以看到,初始情况下,ebp此时值为0012FEDC,也就是栈帧的地址,而栈顶地址esp值为0012FDFC。可以看到两个值有一定的关系。而帧指针的地址较高。
可以看到前两句已经执行了,那么ebp跟esp的值也发生了变化。esp=0012FDF8,ebp=0012FDF8。为神马?一句句解读,push ebp,向栈里面压入了一个东西,那么栈顶此时应该发生变化了,也就是地址-4字节。为什吗是减法呢?因为是向低地址增长的,这点一定得注意。所以此时esp变化成了0012FDFC-4=OO12FDF8.至于ebp也等于0012FDF8就不解释了
此时呢,观察现在的值。栈顶esp=0012FDF4,而ebp=0012FDF8;没啥好说的,此时的栈顶已经又跑上去了,说明又有元素压栈了。那么执 行这句mov esp,ebp之后,不用说,esp跟ebp都会变成0012FDF8.我们重点看下一幅,执行完pop,让ebp出栈,后会发生神马。
此时ebp已经出栈了,来看看那他们的值,esp=0012FDFC,ebp=0012FEDC.首先,ebp出栈了,这个时候栈空了,所以栈顶会变成初始时的值001212FDFC。相当于上图中的esp=0012FDF8+4=0012FDFC.注意出栈,则栈顶+4,然后呢。ebp为啥变成了0012FEDC初始的值?ebp不是一直保存着esp的初始地址么?
所以我们在啰唆几句:
1、两句的mov ebp,esp实际上是把ebp进栈后的栈顶地址给了ebp。
2、在ebp没有出栈钱,它会一直保存ebp进栈以后的栈顶值,也就是1的值。
3、在ebp出栈前,需要把esp恢复到只有ebp在栈中时的值。
4、出栈后,esp自然恢复到ebp进栈以前的初始值,而pop ebp则恢复了ebp的初始值。
5、pop的语义很重要,pop
转自:http://hi.baidu.com/anheizzq/item/1c0899622926c81e7ddecca3
- 汇编指令ebp与esp的关系与作用
- 【汇编与C之间的关系】 push bp(或 push %ebp)mov ebp esp的作用!!!
- 汇编里ebp和esp的作用
- ebp esp与堆栈
- ebp与esp讲解
- ESP与EBP
- ebp与esp讲解
- 函数帧的esp与ebp操作
- ESP,EBP 汇编关于参数的传递
- 实例说明EIP ESP EBP的作用
- 举例说明EIP,EBP,ESP的作用
- 机器码 与 汇编指令的关系
- 机器码 与 汇编指令的关系
- 机器码 与 汇编指令的关系
- esp寄存器与ebp寄存器介绍
- 详细解析ESP寄存器与EBP寄存器
- 汇编指令与Intrinsics指令的对应关系汇总
- linux函数调用中eip esp ebp的作用
- 插件化开发——替换if-else和switch
- django Rest Framework 系列3
- Educational Codeforces Round 19-E. Array Queries(简单dp)
- Mybatis逆向工程
- Latex使用小结(3)
- 汇编指令ebp与esp的关系与作用
- 读书笔记《Unix编程艺术》六
- 实现自己SpringMVC的RequestMapping
- python 学习笔记—— #(井号)的作用
- java 基本数据类型初始值(默认值)
- git 使用中发现的问题
- jdk环境配置文档
- Zookeeper 最新版本集群搭建部署
- ZOJ-1259-Rails