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}