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
108 每月下载量
270KB
5.5K SLoC
minhook
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 许可协议(LICENSE 或 http://opensource.org/licenses/MIT)。
贡献
除非您明确声明,否则任何有意提交以包含在本作品中的贡献,根据 MIT 许可协议定义,应按上述方式许可,不附加任何额外条款或条件。
依赖
~360–690KB
~11K SLoC