#include <windows.h>
DWORD GetJMP(DWORD dwSrcAddr, DWORD dwDestAddr)
{
return (DWORD)dwDestAddr-dwSrcAddr-5;
}
VOID HotPatchingHooker(PDWORD pdwFuncAddr, PDWORD pdwCallback)
{
DWORD dwOldProtect;
BYTE JMP[] = "\xE9\x00\x00\x00\x00";
VirtualProtect((PUCHAR)pdwFuncAddr - 0x5, 0x7, PAGE_READWRITE, &dwOldProtect);
memcpy(pdwFuncAddr, "\xEb\xF9", 0x2);
*(PDWORD)(JMP+1) = GetJMP((DWORD)((PUCHAR)pdwFuncAddr-0x5), (DWORD)pdwCallback);
memcpy((PUCHAR)pdwFuncAddr-0x5, JMP, 0x5);
VirtualProtect((PUCHAR)pdwFuncAddr - 0x5, 0x7, dwOldProtect, &dwOldProtect);
return;
}