Join Date: Jan 2011
Posts: 12
|
Für die includes + Interfaces war es auf jeden Fall hilfreich. Ich versuche nun wie er Init(), HudUpdate() und CreateMove() zu hooken und habe mir dazu den index in der ClientBase VTable rausgesucht.
Init: 0, HudUpdate: 11, CreateMove: 21
Mein HudUpdate hook functioniert problemlos. Bei meinem Init hook crasht das Game beim aufruf der Original-Funktion.
Im Header:
CPP Code: int ( __stdcall *oInit )( CreateInterfaceFn, CreateInterfaceFn, CGlobalVarsBase* );
Hook:
CPP Code: oInit = (int ( __stdcall* )( CreateInterfaceFn, CreateInterfaceFn, CGlobalVarsBase* ) )HookVFunc(*(DWORD**)g_pClient, 0,( DWORD* ) &hkInit );
Gehookte Funktion:
CPP Code: int hkInit( CreateInterfaceFn appSystemFactory, CreateInterfaceFn physicsFactory, CGlobalVarsBase *pGlobals ) { return oInit( appSystemFactory, physicsFactory, pGlobals ); //<-- crash }
Hier noch die HookVFunc:
CPP Code: DWORD *HookVFunc( DWORD *vtable, int index, DWORD *newFunction ) { DWORD dwOldProt, *oldFunc; VirtualProtect(&vtable[index], 4, PAGE_EXECUTE_READWRITE, &dwOldProt); oldFunc = (DWORD*)vtable[index]; vtable[index] = (DWORD)newFunction; VirtualProtect(&vtable[index], 4, dwOldProt, &dwOldProt); return oldFunc; }
Hat irgend jmd. eine Idee, was der Grund dafür sein kann?
EDIT: Habs jetzt zum laufen gebracht ^^ btw. habe den code oben gefixxt, ist zwar totaler Müll und VAC dt, da in den .rdata Bereich geschrieben wird(s. HookVFunc), aber wenn wer freude daran hat, darf er ihn natürlich gerne verwenden |