Skip to content

pigeonhands/hooking-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hooking-rs

github-badge crates-hooking-badge docs-hooking-badge License

Function hooking in rust

A library for hooking and intercepting functions in rust for windows and linux

Example

Each function creates a stub in memory that consists of

Section Description
Original fn detour stub address A function pointer the generated detour stub to call the original function
Hooking stub A small stub that adds some metadata (like adding detour stub address to r10 reg) before calling the hook
Original fn detour stub stub that re-creates the original fn call instructions and patches the instructions to work with ling jumps, then calls the hooked function

A simple hook:

#[hook(lib = "user32.dll", method = "MessageBoxA")]
unsafe extern "C" fn hook_destination(
    _: *mut std::ffi::c_void,
    lp_text: *const i8,
    lp_caption: *const i8,
    _: u32,
) -> i32 {
    let original_msgbox = unsafe {
        hook_destination::original_function()
            .expect("hook_destination must be invoked from hook for original_function to work")
    };

    original_msgbox(
        std::ptr::null_mut(),
        c"msgbox was hooked!".as_ptr(),
        c"Intercepted hook".as_ptr(),
        0,
    )
}

unsafe {
    unsafe { hook_destination::enable_hook(); }
}

You can see more examples in the example directory of the repository.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages