here you need this function this is not mind
Code:
void function_list_dump( )
{
dwGameGuardClassBase = GetGameGuard( );
do
{
GGMethodTable = *(PDWORD*)dwGameGuardClassBase;
Sleep(10);
}
while( !GGMethodTable );
while( *(PDWORD)((DWORD)dwGameGuardClassBase + 4) == NULL )
Sleep(10);
do
{
GGMethodTable2 = **(PDWORD**)((DWORD)dwGameGuardClassBase + 4);
}
while( !GGMethodTable2 );
#ifdef LOG_GG
pLog->log("\n-------------\nGG Method Table 1\nsize = %d", dwGetMethodCount(GGMethodTable));
PrintMethodLocations( GGMethodTable );
pLog->log("\n-------------\nGG Method Table 2\nsize = %d", dwGetMethodCount(GGMethodTable2));
PrintMethodLocations( GGMethodTable2 );
ExitProcess(0);
#endif
}
GetGameGuard? Another GG function that's wrapped
Code:
typedef PVOID (__cdecl* tGetGameGuard)( );
tGetGameGuard GetGameGuard = (tGetGameGuard)GGPTR;
GGPTR? Location of this function
Code:
mov eax, offset off_D25874
retn
I just print the functions like this:
Code:
void PrintMethodLocations( PDWORD pdwVMT )
{
DWORD dwIndex = 0;
for ( dwIndex = 0; pdwVMT[ dwIndex ]; dwIndex++ )
{
if ( IsBadCodePtr( ( FARPROC ) pdwVMT[ dwIndex ] ) )
{
break;
}
pLog->log("%i [ 0x%x ]", dwIndex, pdwVMT[dwIndex]);
}
}
This is not mind code you need to change a addresses all credit by shadow