首页
社区
课程
招聘
[讨论]关于EBP与ESP的问题
发表于: 2011-1-22 22:05 5682

[讨论]关于EBP与ESP的问题

2011-1-22 22:05
5682
ebp可存取整个堆栈esp只能访问栈顶这两句话该如何去理解/
这个堆栈具体指什么范围呢?
为什么ebp-xx 或者ebp+xx都通过esp给ebp赋值呢?
难道只因为esp是栈顶会离访问的数据近?
可以的话通俗点儿,.,..
谢谢

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 7
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
思考了很久。想不通
2011-1-22 22:21
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我觉得ESP是因为PUSH和POP时ESP都会自加自减,用他去做计算应该不是很方便吧。。。
2011-1-22 22:37
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
之所以用ebp大概只是习惯而已吧,事实上完全可以用esp,在VC中如果设置了选项/Oy,就会禁用栈帧指针,这时大概就是用esp取参数了吧。我没试过,lz可以试一下。

ebp和esp显然都可以访问整个栈帧或者堆栈,但是用ebp比较好区分,esp的话都是esp+xx,而ebp+xx的都是传递来的参数,ebp-xx的都是局部变量,好区分。

至于一个栈帧到底包括多大的范围,这我不知道,栈顶没啥分歧,我比较习惯认为,栈帧的栈底在ebp+4。
2011-1-22 23:21
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
esp随时在变动(因为堆栈也随时在变动,它和ss联合指向栈顶)而ebp类似于快照 记录某一时刻的值 它本身并无任何具体任务 只当做传递参数的寄存器,所以要把ESP的值传递给EBP,如果直接访问esp 则堆栈的指针就会产生混乱。
2011-1-23 16:01
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
to LS:

完全不会混乱,人进行静态分析或许感觉很郁闷,但是对于编译器来说用ebp还是用esp完全没有区别,编译器编译出来的代码总是会在高效和方便调试之间做出妥协,这或许只是一种妥协的结果的吧。
2011-1-23 21:10
0
雪    币: 7
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,感谢楼上的几位朋友有点儿明白了》。
2011-1-23 21:58
0
游客
登录 | 注册 方可回帖
返回
//