用DLL / ASI挂钩

时间:2013-12-06 12:44:29

标签: c++ dll hook detours

下午好,我有一点问题。

我正在使用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 地址,还是错了?

0 个答案:

没有答案