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

[求助]p77 thiscall 的问题

2013-8-7 23:02
20768
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有什么意义么?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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