Skip to main content

macros/
macros.rs

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