首页
社区
课程
招聘
[求助]p77 thiscall 的问题
2013-8-7 23:02 20645

[求助]p77 thiscall 的问题

2013-8-7 23:02
20645
00401000  /$  55            push    ebp                             
00401001  |.  8BEC          mov     ebp, esp
00401003  |.  51            push    ecx
00401004  |.  6A 02         push    2
00401006  |.  6A 01         push    1
00401008  |.  8D4D FC       lea     ecx, dword ptr [ebp-4]
0040100B  |.  E8 10000000   call    00401020
00401010  |.  8BE5          mov     esp, ebp
00401012  |.  5D            pop     ebp
00401013  \.  C3            retn

00401003 处的push ecx有什么意义么?

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ITSailor 2013-8-7 23:30
2
0
****
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
triones 6 2013-8-8 10:10
3
0
这个push ecx是编译器优化后的局部变量分配,因为函数只用到一个DWORD大小的局部变量,编译器不使用sub esp,4来开辟局部变量的堆栈空间,而是使用push reg32来开辟,一般就是push ecx。
这个局部变量应该是一个临时的未初始化的对象,被作为this(ecx)传递给00401020函数。
所以不要被push ecx给迷惑了,以为是传递参数什么的。书上教的是死的,要结合环境判定作用。
再如lea eax,[eax+1234578]就是取地址吗?其实只是编译器用来做简单加法而已。
call $+5就是用来调用函数吗?其实只是用来压入下一个指令地址而已。
雪    币: 363
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
禹xiaoyan 2013-8-8 22:34
4
0
这个程序的main函数里边只有一个CSum变量,为什么会有DWORD大小的局部变量?
游客
登录 | 注册 方可回帖
返回