Files
Huoji's 06acf8b24d 11
2023-10-04 06:01:28 +08:00

35 lines
992 B
C++

#include "vmthook.h"
VMTHook::VMTHook(void* vmt_addy)
{
vmt = (void**)vmt_addy;
}
void* VMTHook::Hook(int index, void* hk)
{
// Store the index and original function address
hooked_funcs.insert(std::make_pair(index, vmt[index]));
printf("vmt hook at: %p \n", vmt[index]);
// Change the memory's access rights, patch the address to our hook, restore original rights
DWORD old;
VirtualProtect(&vmt[index], sizeof(void*), PAGE_EXECUTE_READWRITE, &old);
vmt[index] = hk;
VirtualProtect(&vmt[index], sizeof(void*), old, NULL);
return hooked_funcs[index];
}
void VMTHook::ClearHooks()
{
for (func_iterator = hooked_funcs.begin(); func_iterator != hooked_funcs.end(); func_iterator++)
{
DWORD old;
VirtualProtect(&vmt[func_iterator->first], sizeof(void*), PAGE_EXECUTE_READWRITE, &old);
vmt[func_iterator->first] = func_iterator->second;
VirtualProtect(&vmt[func_iterator->first], sizeof(void*), old, NULL);
}
hooked_funcs.clear();
vmt = nullptr;
}
VMTHook::~VMTHook() {}