首页
社区
课程
招聘
[旧帖] [求助]ebp和esp的区别 0.00雪花
发表于: 2012-4-30 11:04 1671

[旧帖] [求助]ebp和esp的区别 0.00雪花

2012-4-30 11:04
1671
同样一个程序,很奇怪,反汇编的参数,在debug中,是[ebp+8],[ebp+c]开始的
但是在release中,是[esp+4],[esp+8]开始的

求高人解释一下原理:)

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
2
ESP 为栈顶指针

EBP:通常标准的用法是栈桢寻址,也可以用于一般的通用寄存器。

因为用ESP也可以对栈桢进行寻址(替代EBP的功能),所以在编译优化中通常用ESP直接对栈桢进行寻址,而将EBP省下来留作他用。debug编译中不允许优化,而release中可能你的设置默认开了编译优化功能,从而出现你描述的情况。
2012-4-30 12:14
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
记得 看雪10周年上一位前辈 写的一篇文章是讲基础知识的。。

上面对寄存器的介绍。。感觉很不错啊。。

引用:

"EAX、EBX、ECX、EDX、ESP、EBP、EDI、ESI 是通用寄存器。其中eax到ebx 是数据寄存器。
而ESP、EBP、EDI、ESI这四个呢,就只能用字来访问,它们的主要用途就是在存储器寻址时,提供偏移地址。因此,它们可以称为指针或变址寄存器。话说回来,从386以后,所有的寄存器都可以用来存储内存地址。(这里给你讲一个小知识,你在破解的时候是不是看到过[EBX]这样的形式呢?这就是说此时EBX中装的是一个内存地址,而真正要访问的,就是那那个内存单元中所存储的值)。
ESP称为堆栈指针寄存。堆栈是一个很重要的概念,它是以“后进先出”方式工作的一个存储区,它必须存在于堆栈段中,因而其段地址存放于SS寄存器中。 "

希望对楼主有帮助。
2012-4-30 14:50
0
游客
登录 | 注册 方可回帖
返回
//