schnell erklärt was das hier is:
eine "andere" methode vtable funktionen zu hooken, die meisten hooken direkt die funktion!
diese funktion hier nicht, es wird nur der vtable eintrag überschrieben... vorteil: es wird keine backup funktion benötigt da die gehookte funktion nicht + geändert wird! zwar nur eine kleinigkeit, finde ich trotzdem einfacher als immer CreateHook((void*)VTable[4], hookVTable4,true,true); zu callen!
ich werds nicht weiter erklären, man sollte es verstehen:
hoffe mal dass es wenigstens manchen hilft ;)
edit: nochmal die parameterlist (wobei man selbst drauf kommen sollte was die bedeuten :))
VTablePtr - pointer zur vtable (in den meisten fällen von FindPattern etc.)
VTableIndex - index der zu hookenden funktion
HookPtr - pointer zur funktion die gecalled werden soll
eine "andere" methode vtable funktionen zu hooken, die meisten hooken direkt die funktion!
diese funktion hier nicht, es wird nur der vtable eintrag überschrieben... vorteil: es wird keine backup funktion benötigt da die gehookte funktion nicht + geändert wird! zwar nur eine kleinigkeit, finde ich trotzdem einfacher als immer CreateHook((void*)VTable[4], hookVTable4,true,true); zu callen!
ich werds nicht weiter erklären, man sollte es verstehen:
Code:
PBYTE HookVTable(DWORD** VTablePtr, int VTableIndex, PBYTE HookPtr) {
DWORD oldProtect;
VirtualProtect((void*)((*VTablePtr)+(VTableIndex*sizeof(DWORD))),sizeof(DWORD),PAGE_EXECUTE_READWRITE,&oldProtect);
PBYTE original=((BYTE*)(*VTablePtr)[VTableIndex]);
(*VTablePtr)[VTableIndex]=(DWORD)HookPtr;
VirtualProtect((void*)((*VTablePtr)+(VTableIndex*sizeof(DWORD))),sizeof(DWORD),oldProtect,&oldProtect);
return original;
}
edit: nochmal die parameterlist (wobei man selbst drauf kommen sollte was die bedeuten :))
VTablePtr - pointer zur vtable (in den meisten fällen von FindPattern etc.)
VTableIndex - index der zu hookenden funktion
HookPtr - pointer zur funktion die gecalled werden soll