5 个版本
0.2.1 | 2023 年 7 月 5 日 |
---|---|
0.2.0 | 2023 年 6 月 6 日 |
0.1.2 | 2023 年 2 月 18 日 |
0.1.1 | 2023 年 2 月 17 日 |
0.1.0 | 2023 年 2 月 16 日 |
#2525 在 Rust 模式
每月 56 次下载
13KB
125 代码行
retour-utils
这个包旨在帮助使用 retour 包 创建跳转。如果您需要创建很多跳转,那么这个过程会非常重复,因此这个包添加了一些辅助函数和宏,以极大地简化/优化这个过程。
示例
use retour_utils::hook_module;
#[hook_module("lua52.dll")]
mod lua {
// #[hook_module] will create this
// const MODULE_NAME: &str = "lua52.dll"
// and
// pub unsafe init_detours() -> crate::Result<()> {..}
// which will initialize all the StaticDetours generated by the macro inside this module
#[allow(non_camel_case_types)]
type lua_State = ();
#[allow(non_camel_case_types)]
type lua_Alloc = ();
// Creates a StaticDetour called Lua_newstate with the same function type as our function
// (minus abi/unsafe to work with retour crate)
#[hook(unsafe extern "C" Lua_newstate, symbol = "Lua_newstate")]
pub fn newstate(f: *mut lua_Alloc, ud: *mut std::ffi::c_void) -> *mut lua_State {
unsafe {
Lua_newstate.call(f, ud)
}
}
// More lua hooks
}
// #[hook_module] creates a `init_hooks` function that initializes and enables all the hooks
lua::init_hooks().unwrap()
目前处于早期阶段,有些地方可能比较粗糙
- 目前仅支持 Windows
- 尚未提供文档
- 宏和函数的命名可能因一致性/清晰度而更改
依赖关系
~3–44MB
~643K SLoC