私はC++、C#とPHPの人にはあまり良くありません。私はGetTickCount
を使用してアプリケーションにフックするプロジェクトが割り当てられています。私はいくつかの理由でそれが計画どおりに動作していないためにいくつかの助けが必要...ここではフックのコードは、私はそれが以前にプロジェクトでそれを使用しているので、私は知っている。私はそれについて確信していない唯一のものはGetTickCount
の一部です。私はGetTickCount64
(私はそれに注入していたものをクラッシュしなかった)私の問題への修正だと思ったが、代わりにそれがクラッシュしないように全く働いていないことを知った。ここでC++でGetTickCountをフックする
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;
}
のために使用されるコードの残りの部分である、あなたは間違っているか、それが変更されなければならないものを見ることができますか?どんな助けもありがとうございます。ありがとうございました!
実際の問題は何ですか? – wj32
アプリを挿入しようとするとクラッシュします。私のQueryPerformanceCounterは問題なく問題なく注入します。 – E3pO
'DLL_PROCESS_DETACH'の前に' break; 'を置くのはどうですか?今すぐ書かれているように - あなたはすぐに初期化の後にあなたのフックを削除します – valdo