karlgalagger Опубликовано 5 октября, 2019 Поделиться Опубликовано 5 октября, 2019 (изменено) Уже как неделю я пытаюсь сделать хук 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); } Изменено 14 октября, 2019 пользователем Xipho Код нужно оборачивать специальным тегом, и спойлером, если длина кода больше 10 строк. Это все прописано в правилах. На первый раз устное предупреждение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 октября, 2019 Поделиться Опубликовано 14 октября, 2019 Посмотри под отладчиком, что происходит в момент выполнения, так проще будет диагностировать проблему. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения