OK, Ive been having some problems trying to hook an OpenGL table within a process only to recieve crashing. I believe its due to my cast conversions and such, but I am clueless on how to fix it.
Code:
glViewport_t pglViewport;
//OpenGL function to hook
void APIENTRY hooked_glViewport( GLint x, GLint y, GLsizei width, GLsizei height )
{
return pglViewport( x, y, width, height );
}
//Keeps crashing here
void CodeWalk( DWORD dwStartAddress, DWORD dwEndAddress )
{
for ( DWORD dwCurrentAddress = dwStartAddress; dwCurrentAddress <= dwEndAddress-0x6; dwCurrentAddress+=0x6 )
{
PDWORD pdwTempAddress = ( PDWORD ) dwCurrentAddress + 0x2;
PDWORD pdwTableAddress = ( PDWORD ) *pdwTempAddress;
HMODULE hmOpenGL = LoadLibrary( "opengl32.dll" );
if ( *pdwTableAddress == ( DWORD ) GetProcAddress( hmOpenGL, "glViewport" ) )
{
pglViewport = ( glViewport_t ) *pdwTableAddress;
*pdwTableAddress = ( DWORD ) &hooked_glViewport;
}
}
}
//Hooked with CreateThread after sleeping for 2 seconds
void SetupOpenGLHooks( void )
{
DWORD dwImportCode = (DWORD)0x01D7AFA0;
if(dwImportCode != NULL)
{
CodeWalk(dwImportCode,dwImportCode + 0x870); //Lets go through the table
}
else
{
MessageBox(NULL,"Couldnt Find the TLS","newhook",NULL);
}
}