Skip to main content

make_hook

Function make_hook 

Source
pub fn make_hook<F: Copy>(symbol: &str, alias: &str, detour: F) -> HookDef
Examples found in repository?
examples/inline_hooks_config.rs (lines 16-21)
10fn main() -> dobby_rs_framework::Result<()> {
11    common::init_example_logging();
12
13    // EN: Build HookDef(s) using helpers.
14    // CN: 使用 helper 构造 HookDef。
15    #[cfg(unix)]
16    let hooks: Vec<HookDef> = vec![make_hook(
17        "puts",
18        "puts_cfg",
19        common::detours::unix::detour_puts
20            as unsafe extern "C" fn(*const core::ffi::c_char) -> core::ffi::c_int,
21    )];
22    #[cfg(windows)]
23    let hooks: Vec<HookDef> = vec![make_hook_simple(
24        "GetCurrentProcessId",
25        common::detours::windows::detour_get_current_process_id
26            as unsafe extern "system" fn() -> u32,
27    )];
28
29    let mut session: HookSession = unsafe {
30        install_inline_hooks(InlineHooksConfig {
31            lib_name: common::DEMO_LIB,
32            hooks,
33            extra_action: Some(Box::new(|m: &ModuleHandle| {
34                // EN: `ModuleHandle` is available here.
35                // CN: 这里可以拿到 `ModuleHandle`。
36                let sym = if cfg!(windows) {
37                    "GetCurrentProcessId"
38                } else {
39                    "puts"
40                };
41                common::resolve_and_print(m, sym)
42            })),
43        })?
44    };
45
46    unsafe { session.unhook_all()? };
47    Ok(())
48}