首页
社区
课程
招聘
菜鸟请教汇编基础问题
发表于: 2005-11-1 09:47 4196

菜鸟请教汇编基础问题

2005-11-1 09:47
4196
下面这个很简单的程序,用IDA反汇编后就有几百行,我怎么能找到头绪呢?
如果没有source code,我从哪里下手呢? 有很多行肯定是什么异常处理之类的,和我关心的程序主干没关系的吧? 我怎么找呢? 谢谢各位

#include <stdio.h>

void main ()
{
    int i=0;

        if (i=0)
                i = i;
        i++;

}

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
用Release编译, IDA里直接找WinMain,进去看, 这样清楚多了
2005-11-1 09:52
0
雪    币: 200
活跃值: (10)
能力值: ( 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啊?

多谢
2005-11-1 10:21
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
text:004010BF                 call    nullsub_1
这个是CAll WinMain  你所写的东西都在里面了

前面全是VC干的, 不用去管它
2005-11-1 11:03
0
雪    币: 200
活跃值: (10)
能力值: ( 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()呢?
2005-11-1 12:19
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
因为编译器发现
    int i=0;

  if (i=0)
    i = i;
  i++;
这些都是垃圾,所以就没有编译进去
你可以写一个有意义 的,如
MessageBox(0, "test1", "test2", 0);
2005-11-1 13:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
明白了,多谢[南蛮妈妈]
2005-11-1 14:28
0
雪    币: 233
活跃值: (130)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
2005-11-1 16:00
0
雪    币: 316
活跃值: (336)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
。。。也只有妈妈才有耐心说这些了。
想对应应该反着来,源代码和汇编对着看。
2005-11-1 20:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
说真的,很少有南蛮妈妈这样耐心的高手肯指点我们这些菜鸟了。
另外,我发觉一点加入include语句后,编译出来的程序会大了。多了好多无用的东西。如果在编译时选择不同的模式参数(Mini模式最小),所编译出来的程序包括的其他信息和代码会相对较少。
2005-11-2 10:10
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
11
最初由 shell800 发布
。。。也只有妈妈才有耐心说这些了。


向 南蛮妈妈 学习
2005-11-2 10:28
0
游客
登录 | 注册 方可回帖
返回
//