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}