首页
社区
课程
招聘
[求助][求助]IDA反汇编一个问题。
发表于: 2008-11-5 18:56 5614

[求助][求助]IDA反汇编一个问题。

2008-11-5 18:56
5614
这个问题我比较的困惑,在下面的图中,在CALL完了之后,add esp,8恢复栈之后,很多的函数后面总会跟有mov [ebp+var_4] eax,mov eax [ebp+var_4].

我的问题是,为什么这两个指令要跟在一块,我觉得后面的那条指令没有必要啊~因为eax并没有改变,怎么会这样呢?谁能帮下忙,新鸟~请教。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个很好理解吧。看这个例子。

#include <windows.h>

int func0()
{
return 1234;
}

int func1()
{
return func0();
}

int func2()
{
int result;
result = func0();
return result;

}

int APIENTRY WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
func1();
func2();
return 0;
}


汇编一下。

004017D0 /$ 55 push ebp ; WinMain
004017D1 |. 8BEC mov ebp, esp
004017D3 |. E8 E8FFFFFF call 004017C0 ; func1
004017D8 |. E8 C3FFFFFF call 004017A0 ; func2
004017DD |. 33C0 xor eax, eax
004017DF |. 5D pop ebp
004017E0 \. C2 1000 retn 10

004017C0 /$ 55 push ebp ; func1
004017C1 |. 8BEC mov ebp, esp
004017C3 |. E8 C8FFFFFF call 00401790
004017C8 |. 5D pop ebp
004017C9 \. C3 retn

004017A0 /$ 55 push ebp ; func2
004017A1 |. 8BEC mov ebp, esp
004017A3 |. 51 push ecx
004017A4 |. E8 E7FFFFFF call 00401790
004017A9 |. 8945 FC mov dword ptr [ebp-4], eax
004017AC |. 8B45 FC mov eax, dword ptr [ebp-4]

004017AF |. 8BE5 mov esp, ebp
004017B1 |. 5D pop ebp
004017B2 \. C3 retn

00401790 /$ 55 push ebp ; func0
00401791 |. 8BEC mov ebp, esp
00401793 |. B8 D2040000 mov eax, 4D2
00401798 |. 5D pop ebp
00401799 \. C3 retn
2008-11-5 19:53
0
雪    币: 237
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
长见识了,谢谢
2008-11-5 20:57
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
刚刚用vc对应的反汇编看了看。
16:     result = func0();
004010B8   call        @ILT+0(func0) (00401005)
004010BD   mov         dword ptr [ebp-4],eax
17:     return result;
004010C0   mov         eax,dword ptr [ebp-4]

明白了~thanks~
2008-11-5 22:32
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
说得很好。
2008-11-5 23:53
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用写汇编的思路来看就会无法理解了。可是这个。。。不会被优化掉么?
2008-11-7 11:30
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我用的VC2005 release编译,默认优化选项是Maximize Speed (/O2),这样确实会被优化掉。整个WinMain函数就2行
00401000 /$ 33C0 xor eax, eax
00401002 \. C2 1000 retn 10


为了做演示,就把优化选项改成 Disabled (/Od),就看到2楼的结果了。
2008-11-7 14:58
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
没有优化就这样……
2008-11-7 17:09
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
类型强制转换。没有确实可以,但这与编译器有关(优化问题)!
2008-11-7 20:57
0
游客
登录 | 注册 方可回帖
返回
//