下午好,我有一点问题。
我正在使用Microsoft Detours 3.0来挂钩游戏,调用我的函数并更改一些数据。
现在,当我加载游戏时,就像我的ASI文件甚至不存在一样。
现在,我想知道天气这是因为我挂错地址或者我写钩子的方式不起作用。
这是我的Dllmain:
BOOL APIENTRY dllmain(HINSTANCE hinstDLL, DWORD nReason, LPVOID lpvReserved)
{
switch(nReason)
{
case DLL_PROCESS_ATTACH:
OriginalFunction = (int(_cdecl*)(int))DetourFunction((PBYTE)GameLoading, (PBYTE)ChangeLoadingBarColor);
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
我的Hook功能在这里:
BYTE ChangeLoadingBarColor(int a, DWORD Bar_color_R,DWORD Bar_color_G,DWORD Bar_color_B,BYTE Bar_color_set_R,BYTE Bar_color_set_G,BYTE Bar_color_set_B)
{
return *(BYTE*)Bar_color_R;
return *(BYTE*)Bar_color_G;
return *(BYTE*)Bar_color_B;
*(BYTE*)Bar_color_R = Bar_color_set_R;
*(BYTE*)Bar_color_G = Bar_color_set_G;
*(BYTE*)Bar_color_B = Bar_color_set_B;
return OriginalFunction(a);
}
这是定义的地址和指向原始函数的指针:
DWORD Bar_color_R = 0x4A6B80;
DWORD Bar_color_G = 0x4A6B7E;
DWORD Bar_color_B = 0x4A6B7C;
DWORD Bar_color_set_R = {5};
DWORD Bar_color_set_G = {54};
DWORD Bar_color_set_B = {250};
DWORD GameLoading = 0x587F00;
int (_cdecl* OriginalFunction) (int);
我的代码是否正确挂钩了指定的 GameLoading 地址,还是错了?