2017-08-22 8 views
0

私はrecv()関数をフックしようとしていますが、それは完全に動作します。ここには表示されていませんが、フックされた機能は、受信した内容をコンソールに出力します。DetourRemoveを正しく使うには?

今、私はkeypressでこの機能を解除しようとしていますが、新しい受信パケットがまだコンソールに出力されているので機能しない可能性があります。私はDetourRemoveを動作させるために切り替えや変更を試みましたが、誰かが助けることができれば、私は感謝しています。基本コードは下にあります。

int(__stdcall *recv_orig)(SOCKET s, char *buf, int len, int flags); 
int __stdcall recv_hook(SOCKET s, char *buf, int len, int flags) 
{ 
    return recv_orig(s, buf, len, flags); 
} 

///DETOUR 

recv_orig = (int(__stdcall *)(SOCKET s, char *buf, int len, int flags))DetourFunction(reinterpret_cast<BYTE*>(GetProcAddress(GetModuleHandleW(L"Ws2_32.dll"), "recv")), reinterpret_cast<BYTE*>(recv_hook)); 

///REMOVE 

DetourRemove(reinterpret_cast<BYTE*>(GetProcAddress(GetModuleHandleW(L"Ws2_32.dll"), "recv")), reinterpret_cast<BYTE*>(recv_hook)); 
+0

'DetourRemove'の最初の引数として' recv_orig'を試しましたか? –

+0

いいえ、私は試してみます – SoLux

+0

これを試した後、整数のすべてが16進数に変換され、ここで何が起こっているのですか?これは意味がありません – SoLux

答えて

0

固定されています。私は間違った引数を渡していました:

DetourRemove(reinterpret_cast<BYTE*>(recv_orig), reinterpret_cast<BYTE*>(recv_hook) 
関連する問題