首页
社区
课程
招聘
[旧帖] 关于push的问题 0.00雪花
发表于: 2011-9-13 09:50 1530

[旧帖] 关于push的问题 0.00雪花

2011-9-13 09:50
1530
push操作会使esp寄存器的值自动减少4吗? 还是esp就是一个存储数据的寄存器,和push操作没有关系?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
和push操作有关系, push是减4,pop是加4。
你也可以直接修改esp值,因为它也是个寄存器
2011-9-13 11:16
0
雪    币: 79
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢大哥回答了,那为什么函数反汇编都是push ebp   mov ebp esp     sub esp 0c0h呢   既然push会使esp自动减少为什么还在开头把esp减去0c0h呢?
2011-9-13 11:24
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
esp 是栈操作寄存器
esp减去0c0h  是为临时变量预先申请的一块内存  内存长度为0c0h
2011-9-13 11:51
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
push ebp    保存ebp寄存器的值
mov ebp esp    把当前栈顶传给EBP
sub esp 0c0h     为临时变量留空间
2011-9-13 14:06
0
雪    币: 79
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
sub esp 0c0h     为临时变量留空间 ?   为什么要为临时变量留空间呢?  难道临时变量压栈esp就不会减少4吗?  还是必须在刚开始就分配好这个函数所能用的栈空间,以后不能在分配了?
2011-9-13 15:59
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
这个是编译器作的,为了效率啊。如果你有多个局部变量,每个局部变量有几十个字节,一次次push不是要累死。一个sub指令即方便效率又高。栈空间是编译时分配好的,相比堆来说,栈使用方便。建议LZ看看相关的编程书,这些都是比较基础的知识。
2011-9-14 11:43
0
游客
登录 | 注册 方可回帖
返回
//