Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>After hours of searching and trying to find a solution, I've come up with this nice little solution:</p> <pre><code>#include &lt;windows.h&gt; #include &lt;detours.h&gt; typedef void (__thiscall * CClassFunction_t)(void *__this, unsigned int unk1); CClassFunction_t Real_CClassFunction; void __fastcall Mine_CClassFunction(void *__this, int edx, unsigned int unk1) { Real_CClassFunction(__this, unk1); } template&lt;typename T&gt; void HookFunction(const char *module, char *signature, T &amp;fn_real, PVOID fn_mine) { HookFunction&lt;T&gt;(DetourFindFunction(module, signature), fn_real, fn_mine); } template&lt;typename T&gt; void HookFunction(DWORD address, T &amp;fn_real, PVOID fn_mine) { HookFunction&lt;T&gt;(reinterpret_cast&lt;PVOID&gt;(address), fn_real, fn_mine); } template&lt;typename T&gt; void HookFunction(PVOID target, T &amp;fn_real, PVOID fn_mine) { fn_real = reinterpret_cast&lt;T&gt;(target); HookFunction&lt;T&gt;(fn_real, fn_mine); } template&lt;typename T&gt; void HookFunction(T &amp;fn_real, PVOID fn_mine) { DetourAttach(&amp;(PVOID&amp;)fn_real, fn_mine); } void ApplyHooks() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DWORD function_address = 0x12345678; HookFunction&lt;CClassFunction_t&gt;(address, Real_CClassFunction, Mine_CClassFunction); DetourTransactionCommit(); } BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: { DisableThreadLibraryCalls(hInstance); CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ApplyHooks, 0, 0, 0); break; } } return TRUE; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload