Single-header, minimalistic, cross-platform hook library written in pure C for x86-64 based systems.
While other well-written libraries that do exactly the same already exist, I wanted to have something simple that would not use an entire disassembler engine which can sometimes be painful to include in a project.
Pros of this library:
- Written in pure C
 - No dependencies (no full disassembler engine)
 - Single header
 - Works in both kernelmode/usermode
 - Cross-platform (Windows/Linux/EFI)
 - Easily portable (3 functions to allocate/free/protect memory that are platform specific)
 
Cons of this library:
- Breaks when a function starts with unsupported instructions (ex. AVX)
 - Breaks when a function starts with instructions accessing memory using relative addressing (call/jmp/cmp)
 
Include the header file in your project. Initialise hook structure by calling CreateHook. Perform the actual hook by calling EnableHook and optionally revert the hook with a call to DisableHook.
HookInformation info = CreateHook((void*)&FunctionToHook, (void*)&FunctionToCall);
int status = EnableHook(&info);
if (!status)
    return;
// Call the original function with info.Trampoline
FunctionToHook(10, 20);
DisableHook(&info)
This repository is licensed under MIT if not stated otherwise in subfolders.




