xiaozenbin 发表于 2016-5-30 13:33:05

求助调用子程序只有一个RETN的调用的作用

代码如下:
CPU Disasm
地址      十六进制数据          汇编代码                        注释
1000513F      90          nop                           ; EBX EBP的值是判断授权类型,确认序列号是否匹配,重点研究
10005140/$81EC 880C00 sub esp,0C88                  ; crp32dll.ExplainErr(guessed Arg1,Arg2)
10005146|.53          push ebx
10005147|.8B9C24 940C mov ebx,dword ptr ; 12F0DC传值过来FFFFFFFB=-1
1000514E|.55          push ebp
1000514F|.8BAC24 940C mov ebp,dword ptr ; 12F0D8传值过来FFFFFFFB=3
10005156|.56          push esi
10005157|.57          push edi
10005158|.53          push ebx                      ; /<%d> =>
10005159|.55          push ebp                      ; |<%d> =>
1000515A|.68 7C660110 push offset 1001667C          ; |Format = ">>ExplainErr(%d, %d)
"
1000515F|.E8 4CF2FFFF call 100043B0               ; \crp32dll.100043B0, 不用跟,只有返回语名
10005164|.83C4 0C   add esp,0C
10005167|.85DB      test ebx,ebx                  ; EBX=-1
10005169|.7D 0A       jge short 10005175            ; 高于等于,或者进位标志转移清零跳转
1000516B|.8BC3      mov eax,ebx
1000516D|.F7D8      neg eax                     ; =0-EBX
1000516F|.894424 10   mov dword ptr ,eax    ; ESP+10=12EBEC
10005173|.EB 04       jmp short 10005179
10005175|>895C24 10   mov dword ptr ,ebx
10005179|>83FD 08   cmp ebp,8
1000517C|.0F85 840000 jne 10005206                  ; 下面EBX EBP的值是判断授权类型
10005182|.83FB E5   cmp ebx,-1B                   ; Cascaded IF (例 FFFFFFE4..FFFFFFE53 退出)
10005185|.75 3D       jne short 100051C4
10005187|.68 50660110 push offset 10016650          ; /Format = "The requested License Server was not found", case FFFFFFE5 of cascaded IF crp32dll.10005182
1000518C|.68 14890110 push offset 10018914          ; |Arg1 = ASCII "PROGRAM MOVED OR SITEKEY BAD PASSWORD"
10005191|.E8 711C0000 call 10006E07               ; \crp32dll.10006E07
10005196|.68 40660110 push offset 10016640          ; /Format = "<<ExplainErr("
1000519B|.E8 10F2FFFF call 100043B0               ; \crp32dll.100043B0
100051A0|.68 14890110 push offset 10018914          ; /<%s> = "PROGRAM MOVED OR SITEKEY BAD PASSWORD"
100051A5|.68 0C650110 push offset 1001650C          ; |Format = ""%s")
"
100051AA|.E8 01F2FFFF call 100043B0               ; \crp32dll.100043B0
100051AF|.83C4 14   add esp,14
100051B2|.B8 14890110 mov eax,offset 10018914       ; ASCII "PROGRAM MOVED OR SITEKEY BAD PASSWORD"
100051B7|.5F          pop edi
100051B8|.5E          pop esi
100051B9|.5D          pop ebp
100051BA|.5B          pop ebx
100051BB|.81C4 880C00 add esp,0C88
100051C1|.C2 0800   retn 8

在地址
1000515F|.E8 4CF2FFFF call 100043B0
这个调用只有一个返回 RETN,不知什么作用,百思不得其解?
在地址
10005167|.85DB      test ebx,ebx                  ; EBX=-1
10005169|.7D 0A       jge short 10005175            ; 高于等于,或者进位标志转移清零跳转
10005167只影响Z标志,怎么会控制JGE的跳转呢?
本人菜鸟一个,请高手帮指点

xiaozenbin 发表于 2016-6-11 00:25:07

自己看了好久,是不是编程程忘记删除的无用语句呢?对进程好像没影响。
页: [1]
查看完整版本: 求助调用子程序只有一个RETN的调用的作用