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