You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
815 B

#include "InlineHook.h"
4 years ago
VOID MakeInlineHook(PINLINE_HOOK_T Hook, VOID* HookFrom, VOID* HookTo, BOOLEAN Install)
4 years ago
{
unsigned char JmpCode[14] =
{
0xff, 0x25, 0x0, 0x0, 0x0, 0x0, // jmp QWORD PTR[rip + 0x0]
// jmp address...
0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0
};
// save original bytes, and hook related addresses....
Hook->Address = HookFrom;
Hook->HookAddress = HookTo;
MemCopy(Hook->Code, HookFrom, sizeof Hook->Code);
4 years ago
// setup hook...
MemCopy(JmpCode + 6, &HookTo, sizeof HookTo);
MemCopy(Hook->JmpCode, JmpCode, sizeof JmpCode);
if (Install) EnableInlineHook(Hook);
4 years ago
}
VOID EnableInlineHook(PINLINE_HOOK_T Hook)
4 years ago
{
MemCopy(Hook->Address, Hook->JmpCode, sizeof Hook->JmpCode);
4 years ago
}
VOID DisableInlineHook(PINLINE_HOOK_T Hook)
4 years ago
{
MemCopy(Hook->Address, Hook->Code, sizeof Hook->Code);
4 years ago
}