Skip to main content

hook_puts/
hook_puts.rs

1use hooking::Hook;
2pub use hooking::{HookData, HookWriter};
3pub use std::{arch::asm, ffi::CStr};
4
5unsafe extern "C" fn hooked_puts(s: *const i8) {
6    let param_s = unsafe { CStr::from_ptr(s) };
7
8    let original_puts: extern "C" fn(*const i8) = unsafe {
9        std::mem::transmute(
10            hooking::original_function_ptr()
11                .expect("invoked from hook")
12                .as_ptr(),
13        )
14    };
15
16    println!(
17        "Hooked function param: {:?} | Original fn restore jump: {:?}",
18        param_s, original_puts
19    );
20
21    original_puts(c"Call original puts restore detour".as_ptr());
22}
23
24fn main() {
25    let mut hook = unsafe { Hook::by_name(None, c"puts", hooked_puts as *mut u8).unwrap() };
26
27    unsafe {
28        hook.apply_hook().unwrap();
29    }
30
31    #[cfg(target_os = "linux")]
32    unsafe {
33        libc::puts(c"Am i hooked?".as_ptr());
34    }
35}