Skip to main content

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}