帮忙看看这段反汇编代码反成c代码应该什么样 是不是只看call上下关联的就能反c了
.text:0040B15F push ebp
.text:0040B160 mov ebp, esp
.text:0040B162 push 0FFFFFFFFh
.text:0040B164 push offset unk_4278F0
.text:0040B169 push offset sub_40F83C
.text:0040B16E mov eax, large fs:0
.text:0040B174 push eax
.text:0040B175 mov large fs:0, esp
.text:0040B17C sub esp, 58h
.text:0040B17F push ebx
.text:0040B180 push esi
.text:0040B181 push edi ; 函数初始化及分配堆栈
.text:0040B182 mov [ebp+var_18], esp ; 把esp赋值给变量var_18(就起名为a吧)看上去是把esp
.text:0040B182 ; 赋值给a 其实看了下面的api后 形式就是这样了
.text:0040B182 ; 一个mov 接着一个call 形式是这样的 a=getversion()
.text:0040B185 call ds:GetVersion ; 调用getversion函数
.text:0040B18B xor edx, edx ; return 0 所以暂定这个函数的形式是int boxer()
.text:0040B18B ; {
.text:0040B18B ; a=getversion();
.text:0040B18B ; return 0;
.text:0040B18B ; }
.text:0040B18D mov dl, ah ;将ah给dl(这些高低位的寄存器不用解释了吧?)
.text:0040B18F mov dword_434270, edx ;把edx的值以4字节(dword)放在地址00434270那里,就是说00434270是一个指针了
.text:0040B195 mov ecx, eax ;eax给ecx
.text:0040B197 and ecx, 0FFh ;ecx的值与0xff相与
.text:0040B19D mov dword_43426C, ecx;ecx的值放到地址0043426c,一样是双字格式4字节
.text:0040B1A3 shl ecx, 8 ;ecx左移8位
.text:0040B1A6 add ecx, edx ;ecx加上edx结果放在ecx
.text:0040B1A8 mov dword_434268, ecx;跟上面的那些一样了
.text:0040B1AE shr eax, 10h ;eax右移0x10位,就是十进制的16
.text:0040B1B1 mov dword_434264, eax;说过了
.text:0040B1B6 push 1 ;将常量1入栈
.text:0040B1B8 call sub_40F7D6 ;调用位于0040f7d6的函数,这个函数只有1个参数,传递的参数值为上面的1
.text:0040B1BD pop ecx ;从栈弹出ecx
.text:0040B1BE test eax, eax ;检测eax是否为0.就是上面那个函数的返回值是否为0
.text:0040B1C0 jnz short loc_40B1CA ;不是0就跳
.text:0040B1C2 push 1Ch ; NumberOfBytesWritten,0x1c参数入栈
.text:0040B1C4 call sub_40B28C ;调用位于0040b28c的函数
.text:0040B1C9 pop ecx ;弹出ecx