首页
社区
课程
招聘
od反汇编的几个小错误,大家碰到过吗?
发表于: 2004-12-8 13:53 7910

od反汇编的几个小错误,大家碰到过吗?

2004-12-8 13:53
7910
1。mov eax,xxxx.12345678类指令(xxxx是模块名),有时候传送的是该地址,有 时候却是地址里面的值(我见过一次)
2。or eax,dword prt ds[esi+ebx]类指令。实际上是mov eax,dword prt ds[esi+ebx](也只见过一次)
有点奇怪怎么会出现这样的错误

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

收藏
免费 1
支持
分享
最新回复 (16)
雪    币: 13095
活跃值: (4092)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
2
有这样的事吗?不是吧...
应该粘上代码来看看...
2004-12-8 14:58
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
3
不好意思,头晕看错了。。。
2004-12-8 18:52
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
第一个是我前一段时间发现的,在此之前我曾对这段代码做过静态分析,认为传送的是地址。可是后来的动态执行时发现传送的是数据。但当时并不怎么注意。也没有记下来。
直到前几天分析一段代码是又发现了第二个,这才想到od会不会有什么bug呀。
这段代码是:10001295   |.  8BD1     mov edx,ecx
10001297   |.  C1E9 02  shr ecx,2
1000129A   |.  33C0     xor eax,eax
1000129C   |.  F3:AB    rep stos dword ptr es:[edi]
1000129E   |.  8BCA     mov ecx,edx
100012A0   |.  8B5424 1>mov edx,dword ptr ss:[esp+14]
100012A4   |.  83E1 03  and ecx,3
100012A7   |.  F3:AA    rep stos byte ptr es:[edi]
100012A9   |.  8B4424 2>mov eax,dword ptr ss:[esp+2C]
100012AD   |.  03F0     add esi,eax
100012AF   |.  8D4B FF  lea ecx,dword ptr ds:[ebx-1]
100012B2   |.  8BC1     mov eax,ecx
100012B4   |.  C1E9 02  shr ecx,2
100012B7   |.  8BFA     mov edi,edx
100012B9   |.  F3:A5    rep movs dword ptr es:[edi],dword ptr ds:[esi]
100012BB   |.  8BC8     mov ecx,eax
100012BD   |.  8B4424 1>mov eax,dword ptr ss:[esp+18]
100012C1   |.  83E1 03  and ecx,3
100012C4   |.  83C4 04  add esp,4
100012C7   |.  25 07000>and eax,80000007
100012CC   |.  F3:A4    rep movs byte ptr es:[edi],byte ptr ds:[esi]
100012CE   |.  79 09    jns short DecEnc.100012D9
100012D0   |.  48       dec eax
100012D1   |.  83C8 F8  or eax,FFFFFFF8
100012D4   |.  40       inc eax
100012D5   |.  79 02    jns short DecEnc.100012D9
100012D7   |.  F7D8     neg eax
100012D9   |>  85C0     test eax,eax
100012DB   |.  74 0D    je short DecEnc.100012EA
100012DD   |.  33C9     xor ecx,ecx
100012DF   |.  B1 08    mov cl,8
100012E1   |.  2AC8     sub cl,al
100012E3   |.  0C FF    or al,0FF
100012E5   |.  D2E0     shl al,cl
100012E7   |.  20042A   and byte ptr ds:[edx+ebp],al
100012EA   |>  8B7C24 2>mov edi,dword ptr ss:[esp+2C]
100012EE   |.  81E7 070>and edi,80000007
100012F4   |.  79 09    jns short DecEnc.100012FF
100012F6   |.  4F       dec edi
100012F7   |.  83CF F8  or edi,FFFFFFF8
100012FA   |.  47       inc edi
100012FB   |.  79 02    jns short DecEnc.100012FF
100012FD   |.  F7DF     neg edi
100012FF   |>  8B7424 2>mov esi,dword ptr ss:[esp+24]
10001303   |.  81E6 070>and esi,80000007
10001309   |.  79 09    jns short DecEnc.10001314
1000130B   |.  4E       dec esi
1000130C   |.  83CE F8  or esi,FFFFFFF8
1000130F   |.  46       inc esi
10001310   |.  79 02    jns short DecEnc.10001314
10001312   |.  F7DE     neg esi
10001314   |>  8B6C24 1>mov ebp,dword ptr ss:[esp+18]
10001318   |.  8BCF     mov ecx,edi
1000131A   |.  F7D9     neg ecx
1000131C   |.  51       push ecx
1000131D   |.  8D43 FF  lea eax,dword ptr ds:[ebx-1]
10001320   |.  50       push eax
10001321   |.  52       push edx
10001322   |.  8BCD     mov ecx,ebp
10001324   |.  E8 67FEF>call DecEnc.10001190
10001329   |.  8B4C24 1>mov ecx,dword ptr ss:[esp+10]
1000132D   |.  56       push esi
1000132E   |.  53       push ebx
1000132F   |.  51       push ecx
10001330   |.  8BCD     mov ecx,ebp
10001332   |.  E8 59FEF>call DecEnc.10001190
10001337   |.  33D2     xor edx,edx
10001339   |.  33C9     xor ecx,ecx
1000133B   |.  3BF7     cmp esi,edi
1000133D   |.  0F9FC2   setg dl
10001340   |.  8D5C1A F>lea ebx,dword ptr ds:[edx+ebx-1]
10001344   |.  85DB     test ebx,ebx
10001346   |.  7E 37    jle short DecEnc.1000137F
10001348   |.  8B7C24 2>mov edi,dword ptr ss:[esp+24]
1000134C   |.  8BC7     mov eax,edi
1000134E   |.  99       cdq
1000134F   |.  83E2 07  and edx,7
10001352   |.  03C2     add eax,edx
10001354   |.  8B5424 2>mov edx,dword ptr ss:[esp+20]
10001358   |.  C1F8 03  sar eax,3
1000135B   |.  8D3410   lea esi,dword ptr ds:[eax+edx]
1000135E   |.  8BFF     mov edi,edi
10001360   |>  8B4424 1>/mov eax,dword ptr ss:[esp+10]
10001364   |.  8A1401   |mov dl,byte ptr ds:[ecx+eax]
10001367   |.  08140E   |or byte ptr ds:[esi+ecx],dl
1000136A   |.  41       |inc ecx
1000136B   |.  3BCB     |cmp ecx,ebx
1000136D   |.^ 7C F1    \jl short DecEnc.10001360
1000136F   |.  8B4424 3>mov eax,dword ptr ss:[esp+30]
10001373   |.  03C7     add eax,edi
10001375   |.  5F       pop edi
10001376   |.  5E       pop esi
10001377   |.  5D       pop ebp
10001378   |.  5B       pop ebx
10001379   |.  83C4 0C  add esp,0C
1000137C   |.  C2 1400  retn 14

那个命令在10001367
请高手们看看,解解惑
2004-12-9 20:08
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
完整的程序在下面的地址可以下载到
http://xinc.myrice.com/123.rar
这个命令是在调用的dll里面的
2004-12-9 20:12
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
应该是数据吧
2004-12-9 20:16
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
第一个一般来说是地址
2004-12-9 20:18
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
今天又碰到一个
lea eax,dword prt ds:[ebx-1]
结果是eax=2   (ebx=3)
汗了
2004-12-11 18:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最初由 vfbf 发布
今天又碰到一个
lea eax,dword prt ds:[ebx-1]
结果是eax=2 (ebx=3)
汗了


这个有问题?

还有就是or是或的意思,如
or eax,ebx
如果eax是0,或者非零但跟ebx的某些位相同,结果是跟传送一样的
2004-12-12 09:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 vfbf 发布
1。mov eax,xxxx.12345678类指令(xxxx是模块名),有时候传送的是该地址,有 时候却是地址里面的值(我见过一次)
2。or eax,dword prt ds[esi+ebx]类指令。实际上是mov eax,dword prt ds[esi+ebx](也只见过一次)
有点奇怪怎么会出现这样的错误


我用asm写上了你的代码,编译后用od反汇编,没问题的
2004-12-12 09:30
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 vfbf 发布
今天又碰到一个
lea eax,dword prt ds:[ebx-1]
结果是eax=2 (ebx=3)
汗了


3-1!=2?
汗了
2004-12-12 09:51
0
雪    币: 7
活跃值: (30)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
:D :D :D
恭喜楼主
2004-12-12 11:10
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
13
最初由 vfbf 发布
今天又碰到一个
lea eax,dword prt ds:[ebx-1]
结果是eax=2 (ebx=3)
汗了


汗啥?
2004-12-12 11:33
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
惭愧,惭愧,不过还有一事不明,比如下面两条指令
1000249D     8D45 F0    lea eax,dword ptr ss:[ebp-10]
执行后eax=0012f7c0,地址

1000126C     8D41 FF    lea eax,dword ptr ds:[ecx-1]
执行后eax=22,数值
不知道结果为什么会有不同数据类型
,请指教
2004-12-12 11:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
15
最初由 vfbf 发布
惭愧,惭愧,不过还有一事不明,比如下面两条指令
1000249D 8D45 F0 lea eax,dword ptr ss:[ebp-10]
执行后eax=0012f7c0,地址

1000126C 8D41 FF lea eax,dword ptr ds:[ecx-1]
........

这没什么奇怪的,
你的第一个:EBP = 0012F7D0 - 10 = 0012F7C0 正确
    第二个:ECX = 23 - 1 = 22 正确。
LEA取的的值是看括号里([])计算的值是多少来决定的。
:D
2004-12-12 12:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最初由 小虾 发布

这没什么奇怪的,
你的第一个:EBP = 0012F7D0 - 10 = 0012F7C0 正确
第二个:ECX = 23 - 1 = 22 正确。
LEA取的的值是看括号里([])计算的值是多少来决定的。
........


正解,地址跟数据是没啥区别的,别看0040xxxx的就是地址,小的就是数据,汇编语言无类型的,有的只是4字节的整型。(除浮点指令吧)
2004-12-12 13:20
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
受教了,谢谢
2004-12-12 13:50
0
游客
登录 | 注册 方可回帖
返回
//