Перейти к содержанию

c++ OpenGL hook крашит LWJGL игру (хук wglSwapBuffers)


Рекомендуемые сообщения

Уже как неделю я пытаюсь сделать хук wglSwapBuffers в игре написанной на java + opengl(LWJGL ). 

Сам хук сделать у меня выходит но когда я возвращаю что-то функции - игра вылетает, а без этого окно ломается .

Если я не правильно сформулировал тему, извиняюсь.

Код приложил, что я делаю не так ума не приложу. Жду помощи.

Спойлер

typedef int (__stdcall* SwapBufferType)(HDC);
    SwapBufferType origSwapBuffer = NULL;

    int __stdcall Hooked_wglSwapBuffers(HDC h)
    {
        return (*origSwapBuffer)(h);//Это крашит игру.
    }



    void *DetourFunc( BYTE *src, const BYTE *dst, const int len )
    {
    BYTE *jmp = (BYTE*)malloc( len + 5 );
    DWORD dwback;
    VirtualProtect( src, len, PAGE_READWRITE, &dwback );
    memcpy( jmp, src, len );
    jmp += len;
    jmp[0] = 0xE9;
    *(DWORD*)( jmp + 1 ) = (DWORD)( src + len - jmp ) - 5;
    src[0] = 0xE9;
    *(DWORD*)( src + 1 ) = (DWORD)( dst - src ) - 5;
    VirtualProtect( src, len, dwback, &dwback );
    return ( jmp - len );
    }

    void HookOpenGL(){
        HMODULE openGLModule = GetModuleHandle(L"opengl32.dll");
        origSwapBuffer = (SwapBufferType)DetourFunc((LPBYTE)GetProcAddress(openGLModule, "wglSwapBuffers"), (LPBYTE)&Hooked_wglSwapBuffers, 5);
    }

 

 

Изменено пользователем Xipho
Код нужно оборачивать специальным тегом, и спойлером, если длина кода больше 10 строк. Это все прописано в правилах. На первый раз устное предупреждение.
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.