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) =
9        unsafe { std::mem::transmute(hooking::original_function_ptr().as_ptr()) };
10
11    println!(
12        "Hooked function param: {:?} | Original fn restore jump: {:?}",
13        param_s, original_puts
14    );
15
16    original_puts(c"Call original puts restore detour".as_ptr());
17}
18
19fn main() {
20    let mut hook = unsafe { Hook::by_name(None, c"puts", hooked_puts as *mut u8).unwrap() };
21
22    unsafe {
23        hook.apply_hook().unwrap();
24    }
25
26    #[cfg(target_os = "linux")]
27    unsafe {
28        libc::puts(c"Am i hooked?".as_ptr());
29    }
30}