反汇编一个VC6编译的程序,看到了下面一段代码,有很多不理解的地方,
第一,参数是通过EAX传递的,偶第一次见到,即使是__fastcall规则也只能
通过ecx和edx传递,其中TEST指令和CMP指令紧挨着,如果这段代码是由C++代码编译而来的话,我很想见识一下这段代码,哪位高手帮我逆向一下,3Q
0042C320 /$ B8 10240000 MOV EAX, 2410 //eax传递参数?即使是__fastcall也是通过
0042C325 |. E8 E6092E00 CALL 0070CD10 //ecx,edx来传递参数的阿
0042C32A |. 8B41 10 MOV EAX, DWORD PTR DS:[ECX+10]
0070CD10 /$ 51 PUSH ECX
0070CD11 |. 3D 00100000 CMP EAX, 1000
0070CD16 |. 8D4C24 08 LEA ECX, DWORD PTR SS:[ESP+8]
0070CD1A |. 72 14 JB SHORT 0070CD30
0070CD1C |> 81E9 00100000 /SUB ECX, 1000
0070CD22 |. 2D 00100000 |SUB EAX, 1000
0070CD27 |. 8501 |TEST DWORD PTR DS:[ECX], EAX //下面紧接着有一个CMP指令
0070CD29 |. 3D 00100000 |CMP EAX, 1000
0070CD2E |.^ 73 EC \JNB SHORT 0070CD1C
0070CD30 |> 2BC8 SUB ECX, EAX
0070CD32 |. 8BC4 MOV EAX, ESP
0070CD34 |. 8501 TEST DWORD PTR DS:[ECX], EAX //看似无用的TEST指令
0070CD36 |. 8BE1 MOV ESP, ECX
0070CD38 |. 8B08 MOV ECX, DWORD PTR DS:[EAX]
0070CD3A |. 8B40 04 MOV EAX, DWORD PTR DS:[EAX+4]
0070CD3D |. 50 PUSH EAX //jmp? 第一次见到这样的函数收尾代码
0070CD3E \. C3 RETN
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课