anhkgg / SuperWeChatPC

超级微信电脑客户端,支持多开、防消息撤销、语音消息备份...开放WeChatSDK
4.21k stars 1.01k forks source link

请教 怎么让mhook不破坏ecx。 #55

Closed huhuang03 closed 5 years ago

huhuang03 commented 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破坏了。

huhuang03 commented 5 years ago

原来是Debug模式编译dll的问题,换成Release就没有问题了。