私は C++ が苦手で、C# と PHP の方が得意です。私はGetTickCount
、アプリケーションを使用してフックする必要があるプロジェクトを割り当てられました。何らかの理由で計画どおりに機能しないため、助けが必要です...フックのコードは次のとおりです。以前にプロジェクトで使用したことがあるため、機能することがわかっています。私がよくわからないのは、そのGetTickCount
部分だけです。私はGetTickCount64
それが私の問題の修正であると考えてみましたが(注入したものはクラッシュしませんでした)、代わりにまったく機能していなかったため、クラッシュしなかったことがわかりました。
bool APIENTRY DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hDll);
CreateThread(0,0, (LPTHREAD_START_ROUTINE)KeyHooks, 0, 0, 0);
GetTickCount_orig = (DWORD (__stdcall *)(void))DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount"), (PBYTE)GetTickCount_hooked);
case DLL_PROCESS_DETACH:
DetourRemove((PBYTE)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount"), (PBYTE)GetTickCount_hooked);
break;
}
return true;
}
ここに使用されるコードの残りの部分がありますGetTickCount
DWORD oldtick=0;
DWORD (WINAPI *GetTickCount_orig)(void);
DWORD WINAPI GetTickCount_hooked(void)
{
if(oldtick==0)
{
oldtick=(*GetTickCount_orig)();
return oldtick;
}
DWORD factor;
DWORD ret;
ret = (*GetTickCount_orig)();
factor = 3.0;
DWORD newret;
newret = ret+((oldtick-ret)*(factor-1));
oldtick=ret;
return newret;
}
間違っていること、または変更する必要があることがわかりますか? どんな助けでも大歓迎です。ありがとうございました!