#hook #windows #detour

minhook

MinHook 的 Rust 封装,MinHook 是一个适用于 Windows 的轻量级 x86/x64 API 钩子库

9 个版本 (5 个破坏性更新)

0.5.0 2024 年 3 月 16 日
0.4.3 2024 年 3 月 16 日
0.4.1 2024 年 2 月 28 日
0.4.0 2024 年 1 月 27 日
0.0.0 2023 年 4 月 11 日

#2 in #detour

Download history 5/week @ 2024-05-22 2/week @ 2024-05-29 7/week @ 2024-06-05 10/week @ 2024-06-12 7/week @ 2024-06-19 5/week @ 2024-06-26 23/week @ 2024-07-03 3/week @ 2024-07-17 81/week @ 2024-07-24

108 每月下载量

自定义许可

270KB
5.5K SLoC

Visual Studio Project 3.5K SLoC C 1.5K SLoC // 0.1% comments Rust 332 SLoC // 0.0% comments Visual Studio Solution 322 SLoC Batch 1 SLoC

minhook

Rust Crates.io rustdoc

MinHook 库的 Rust 封装。

与其他钩子crate不同,此crate不要求使用nightly。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
minhook = "0.5.0"

示例

此示例演示了如何为函数创建钩子,并调用原始函数。

use minhook::{MinHook, MH_STATUS};

fn main() -> Result<(), MH_STATUS> {
    // Create a hook for the return_0 function, detouring it to return_1
    let return_0_addr = unsafe { MinHook::create_hook(return_0 as _, return_1 as _)? };

    // Enable the hook
    unsafe { MinHook::enable_all_hooks()? };

    // Call the detoured return_0 function, it should return 1
    assert_eq!(return_0(), 1);

    // Transmute the original return_0 function address to a function pointer
    let return_0_orig = unsafe { std::mem::transmute::<_, fn() -> i32>(return_0_addr) };

    // Call the original return_0 function
    assert_eq!(return_0_orig(), 0);

    Ok(())
}

fn return_0() -> i32 {
    0
}

fn return_1() -> i32 {
    1
}

许可

本项目采用 MIT 许可协议(LICENSEhttp://opensource.org/licenses/MIT)。

贡献

除非您明确声明,否则任何有意提交以包含在本作品中的贡献,根据 MIT 许可协议定义,应按上述方式许可,不附加任何额外条款或条件。

依赖

~360–690KB
~11K SLoC