首页
社区
课程
招聘
[旧帖] [求助]哪个哥哥帮我看看这段反汇编的代码啊? 0.00雪花
发表于: 2008-2-11 05:43 3915

[旧帖] [求助]哪个哥哥帮我看看这段反汇编的代码啊? 0.00雪花

2008-2-11 05:43
3915
004210D0    51              push    ecx
004210D1    56              push    esi
004210D2    8BF1            mov     esi, ecx
004210D4    57              push    edi
004210D5    33FF            xor     edi, edi
004210D7    D946 10         fld     dword ptr [esi+10]
004210DA    D80D 54D88500   fmul    dword ptr [85D854]
004210E0    D95C24 08       fstp    dword ptr [esp+8]
004210E4    D94424 08       fld     dword ptr [esp+8]
004210E8    D804BD A4B88C00 fadd    dword ptr [edi*4+8CB8A4]
004210EF    D85C24 10       fcomp   dword ptr [esp+10]
004210F3    DFE0            fstsw   ax
004210F5    F6C4 05         test    ah, 5
004210F8    7B 53           jpo     short 0042114D //我不是很了解反汇编,所以想请教一下,这句判断,他的前提是什么?判断的那句的值.
004210FA    D94424 10       fld     dword ptr [esp+10]
004210FE    D81CBD A4B88C00 fcomp   dword ptr [edi*4+8CB8A4]
00421105    DFE0            fstsw   ax
00421107    F6C4 41         test    ah, 41
0042110A    0F8A 6E010000   jpe     0042127E
00421110    8B46 64         mov     eax, dword ptr [esi+64]
00421113    BA 01000000     mov     edx, 1
00421118    8BCF            mov     ecx, edi
0042111A    D3E2            shl     edx, cl
0042111C    85D0            test    eax, edx
0042111E    0F85 5A010000   jnz     0042127E
00421124    8B4E 08         mov     ecx, dword ptr [esi+8]
00421127    85C9            test    ecx, ecx
00421129    0F84 4F010000   je      0042127E

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
jpo跳转条件是如果奇偶位为奇(PE标志位是0)则跳。上面那一句test ah,5是测试ah的奇偶位是否为奇还是偶,如果是奇数则PE位是0,如果是偶数,则PE位是1。
2008-2-11 09:06
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
3
004210D7   -> 004210F8   
从程序上下文来看:从[esi+10]取80位扩展浮点数A,经过运算得B存在st(0)中,如果结果B小于A则跳转。

浮点数运算时根据结果设置状态字,就像整数运算根据结果设置EFLAGS。
fcomp的结果影响FPU状态字的第8位,第9位,第10位,第15位(Code0, Code1, Code2, Code3),
fstsw ax将状态字转存到寄存器ax中,
test ah, 5,测试Code0, Code2
jpo表示当(Code0=1,Code2=0)或(Code0=0,Code2=1)时则跳转。
而fcomp中定义了当Code0=1, Code2=0,Code4=0时表示st(0)<src,没有定义Code0=0, Code2=1表示什么。
综上可得。

004210FA  -> 0042110A
从程序上下文来看:从[esi+10]取80位扩展浮点数A,与[edi*4+8CB8A4]处的B比较,如果结果A大于B则跳转。
同上
test ah, 41,测试Code0, Code3
jpe表示当(Code0=1,Code3=1)或(Code0=0,Code3=0)时则跳转。
而fcomp中定义了当Code0=0, Code3=0,Code2=0时表示st(0)>src,没有定义Code0=1, Code3=1, Code2=0时表示什么。

这是编译器作为例程来使用的。
fcomp
...
test ah, 41h
jpe greater

fcomp
...
test ah, 05h
jpo less

fcomp
...
test ah, 44h
jpe equal

Enjoy it.
2008-2-11 16:14
0
游客
登录 | 注册 方可回帖
返回
//