Closed huhuang03 closed 5 years ago
mhook我的替换代码大概是
void foo() { __asm { pushad; pushfd; } ... }
但是我用od查看foo汇编代码时发现,头部被增加了很多代码。而且ecx被破坏了。我想问怎么保护ecx不被破坏呢。
0F6B6A10 55 PUSH EBP 0F6B6A11 8BEC MOV EBP,ESP 0F6B6A13 6A FF PUSH -1 0F6B6A15 68 06E97F0F PUSH 0F7FE906 0F6B6A1A 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 0F6B6A20 50 PUSH EAX 0F6B6A21 81EC 5C010000 SUB ESP,15C 0F6B6A27 53 PUSH EBX 0F6B6A28 56 PUSH ESI 0F6B6A29 57 PUSH EDI 0F6B6A2A 8DBD 98FEFFFF LEA EDI,[EBP-168] 0F6B6A30 B9 57000000 MOV ECX,57 0F6B6A35 B8 CCCCCCCC MOV EAX,CCCCCCCC 0F6B6A3A F3:AB REP STOS DWORD PTR ES:[EDI] 0F6B6A3C A1 2460890F MOV EAX,DWORD PTR DS:[0F896024] 0F6B6A41 33C5 XOR EAX,EBP 0F6B6A43 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX 0F6B6A46 50 PUSH EAX 0F6B6A47 8D45 F4 LEA EAX,[EBP-0C] 0F6B6A4A 64:A3 00000000 MOV DWORD PTR FS:[0],EAX 0F6B6A50 60 PUSHAD 0F6B6A51 9C PUSHFD
可以看到0F6B6A50 pushad执行之前,0F6B6A30 就将ecx破坏了。
原来是Debug模式编译dll的问题,换成Release就没有问题了。
mhook我的替换代码大概是
但是我用od查看foo汇编代码时发现,头部被增加了很多代码。而且ecx被破坏了。我想问怎么保护ecx不被破坏呢。
可以看到0F6B6A50 pushad执行之前,0F6B6A30 就将ecx破坏了。