macros/macros.rs
1//! EN: Convenience macros: `dobby_hook!` + `dobby_original!`.
2//! CN: 便捷宏:`dobby_hook!` + `dobby_original!`。
3
4mod common;
5
6#[inline(never)]
7fn detour_add(x: i32) -> i32 {
8 // EN: `dobby_original!` fetches the original function pointer for this detour.
9 // CN: `dobby_original!` 会根据 detour 找到对应的 original 函数指针。
10 let original: fn(i32) -> i32 = dobby_rs_framework::dobby_original!(detour_add, fn(i32) -> i32);
11 original(x) + 10
12}
13
14fn main() -> dobby_rs_framework::Result<()> {
15 common::init_example_logging();
16
17 // EN: `dobby_hook!` installs a hook using function items.
18 // CN: `dobby_hook!` 直接用函数名安装 hook。
19 let h = dobby_rs_framework::dobby_hook!(common::target_add, detour_add)?;
20
21 println!("target_add(1) after dobby_hook = {}", common::target_add(1));
22
23 unsafe { h.unhook()? };
24 Ok(())
25}