能力值:
( LV8,RANK:130 )
|
-
-
2 楼
用Release编译, IDA里直接找WinMain,进去看, 这样清楚多了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
多谢楼上。
不过我比较愚钝,还是不清楚,,,下面这段应该是程序入口吧?但是好像还不是我想要的东西,,接下去往哪走呢?
.text:00401010 public start
.text:00401010 start proc near
.text:00401010
.text:00401010 var_20 = dword ptr -20h
.text:00401010 var_1C = dword ptr -1Ch
.text:00401010 var_18 = dword ptr -18h
.text:00401010 ExceptionInfo = dword ptr -14h
.text:00401010 var_4 = dword ptr -4
.text:00401010
.text:00401010 push ebp
.text:00401011 mov ebp, esp
.text:00401013 push 0FFFFFFFFh
.text:00401015 push offset unk_404090
.text:0040101A push offset sub_401AD8
.text:0040101F mov eax, large fs:0
.text:00401025 push eax
.text:00401026 mov large fs:0, esp
.text:0040102D sub esp, 10h
.text:00401030 push ebx
.text:00401031 push esi
.text:00401032 push edi
.text:00401033 mov [ebp+var_18], esp
.text:00401036 call ds:GetVersion
.text:0040103C xor edx, edx
.text:0040103E mov dl, ah
.text:00401040 mov dword_4052A4, edx
.text:00401046 mov ecx, eax
.text:00401048 and ecx, 0FFh
.text:0040104E mov dword_4052A0, ecx
.text:00401054 shl ecx, 8
.text:00401057 add ecx, edx
.text:00401059 mov dword_40529C, ecx
.text:0040105F shr eax, 10h
.text:00401062 mov dword_405298, eax
.text:00401067 push 0
.text:00401069 call sub_4019A1
.text:0040106E pop ecx
.text:0040106F test eax, eax
.text:00401071 jnz short loc_40107B
.text:00401073 push 1Ch ; NumberOfBytesWritten
.text:00401075 call sub_401114
.text:0040107A pop ecx
.text:0040107B
.text:0040107B loc_40107B: ; CODE XREF: start+61j
.text:0040107B and [ebp+var_4], 0
.text:0040107F call sub_4017F6
.text:00401084 call ds:GetCommandLineA
.text:0040108A mov dword_405798, eax
.text:0040108F call sub_4016C4
.text:00401094 mov dword_405280, eax
.text:00401099 call sub_401477
.text:0040109E call sub_4013BE
.text:004010A3 call sub_401138
.text:004010A8 mov eax, dword_4052B4
.text:004010AD mov dword_4052B8, eax
.text:004010B2 push eax
.text:004010B3 push dword_4052AC
.text:004010B9 push dword_4052A8
.text:004010BF call nullsub_1
.text:004010C4 add esp, 0Ch
.text:004010C7 mov [ebp+var_1C], eax
.text:004010CA push eax ; uExitCode
.text:004010CB call sub_401165
.text:004010D0 mov eax, [ebp+ExceptionInfo]
.text:004010D3 mov ecx, [eax]
.text:004010D5 mov ecx, [ecx]
还有是不是所有的控制台程序开头的地方都有call ds:GetVersion何call ds:GetCommandLineA啊?
多谢
|
能力值:
( LV8,RANK:130 )
|
-
-
4 楼
text:004010BF call nullsub_1
这个是CAll WinMain 你所写的东西都在里面了
前面全是VC干的, 不用去管它
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我在nullsub_1这个地方只看到一个retn?为什么呢
后来为了方便查找,我又加了一句printf("aaaaaaaaa");
用IDA反汇编后,就很容易找到
.text:004010F0 call sub_401000
这个401000位置就是
.text:00401000 sub_401000 proc near ; CODE XREF: start+AFp
.text:00401000 push offset aAaaaaaaaaaaaaa ; "aaaaaaaaaaaaaaaaaaaaa"
.text:00401005 call sub_401010
.text:0040100A pop ecx
.text:0040100B retn
.text:0040100B sub_401000 endp
这里应该对应我的printf这句对吗? 那么这块的call sub_401010是不是相当于printf()呢?
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
因为编译器发现
int i=0;
if (i=0)
i = i;
i++;
这些都是垃圾,所以就没有编译进去
你可以写一个有意义 的,如
MessageBox(0, "test1", "test2", 0);
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
明白了,多谢[南蛮妈妈]
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
。。。也只有妈妈才有耐心说这些了。
想对应应该反着来,源代码和汇编对着看。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
说真的,很少有南蛮妈妈这样耐心的高手肯指点我们这些菜鸟了。
另外,我发觉一点加入include语句后,编译出来的程序会大了。多了好多无用的东西。如果在编译时选择不同的模式参数(Mini模式最小),所编译出来的程序包括的其他信息和代码会相对较少。
|
能力值:
(RANK:350 )
|
-
-
11 楼
最初由 shell800 发布 。。。也只有妈妈才有耐心说这些了。
向 南蛮妈妈 学习
|