mod common;
use dobby_rs_framework::prelude::*;
static HOOK: StaticHook<fn(i32) -> i32> = StaticHook::new();
#[inline(never)]
fn detour_add(x: i32) -> i32 {
HOOK.call_before();
let out = (HOOK.original())(x + 100);
HOOK.call_after();
out + 10
}
fn main() -> dobby_rs_framework::Result<()> {
common::init_example_logging();
HOOK.set_before(|| log::info!("before"));
HOOK.set_after(|| log::info!("after"));
unsafe {
HOOK.install(
common::target_add as fn(i32) -> i32,
detour_add as fn(i32) -> i32,
)?;
}
let v = common::target_add(1);
println!("target_add(1) = {v}");
unsafe {
HOOK.uninstall()?;
}
Ok(())
}