【求助】ebp和esp的区别

[复制链接]
查看11 | 回复4 | 2021-1-27 06:05:17 | 显示全部楼层 |阅读模式
同样一个程序,很奇怪,反汇编的参数,在debug中,是[ebp+8],[ebp+c]开始的
但是在release中,是[esp+4],[esp+8]开始的
求高人解释一下原理:)
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
引用楼主的回复:同样一个程序,很奇怪,反汇编的参数,在debug中,是[ebp+8],[ebp+c]开始的
但是在release中,是[esp+4],[esp+8]开始的
求高人解释一下原理:)

  两个都是堆栈指针,但是程序员用EBP寻址比用ESP方便,因为ESP会随着PUSH和POP指令而变化,因此它较活泼;EBP则不然,它比较安静,程序员好记,所以程序员常用ebp+x寻址栈上的内存单元。可是计算机则不同,它没有记不住的烦恼,在好的编译器的优化下,它可能会使用较简捷快速的方法来完成任务(怎么好就怎么干)。

回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
debug版生成了标准栈框架,release版本没有。

回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
因为esp不能改变,所以就使用ebp来代替esp
回复

使用道具 举报

千问 | 2021-1-27 06:05:17 | 显示全部楼层
谁说esp不能改变?subesp,16这种代码还少吗?引用3楼的回复:因为esp不能改变,所以就使用ebp来代替esp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行