pub fn make_hook<F: Copy>(symbol: &str, alias: &str, detour: F) -> HookDefExamples 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}