Skip to main content

macros/
macros.rs

1use std::ffi::CStr;
2
3use hooking::{self, hook};
4
5#[hook(method = "puts")]
6unsafe extern "C" fn hooked_puts(s: *const i8) -> libc::c_int {
7    let original_puts = unsafe {
8        hooked_puts::original_function()
9            .expect("hooked_puts must be invoked from hook for original_function to work")
10    };
11
12    let param_s = unsafe { CStr::from_ptr(s) };
13
14    println!(
15        "Hooked function param: {:?} | Original fn restore jump: {:?}",
16        param_s, original_puts
17    );
18
19    original_puts(c"Yes, im hooked!".as_ptr())
20}
21
22fn main() {
23    unsafe { hooked_puts::enable_hook().unwrap() };
24
25    #[cfg(target_os = "linux")]
26    unsafe {
27        libc::puts(c"Am i hooked?".as_ptr());
28    }
29
30    unsafe { hooked_puts::disable_hook().unwrap() };
31
32    #[cfg(target_os = "linux")]
33    unsafe {
34        libc::puts(c"Now im not".as_ptr());
35    }
36}