Перейти к содержанию
Авторизация  
karlgalagger

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 строк. Это все прописано в правилах. На первый раз устное предупреждение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотри под отладчиком, что происходит в момент выполнения, так проще будет диагностировать проблему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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