4个版本
0.2.0 | 2023年6月6日 |
---|---|
0.1.2 | 2023年2月18日 |
0.1.1 | 2023年2月17日 |
0.1.0 | 2023年2月16日 |
#13 在 #detour
用于 retour-utils
15KB
365 行
retour-utils
该库旨在帮助使用retour crate创建转向。如果你创建了很多转向,这会非常繁琐,所以这个库添加了一些辅助函数和宏,以大大简化/简化流程。它适用于Unix和Windows。
示例
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()
目前处于早期阶段,一些明显粗糙的区域
- 尚未提供文档
- 宏和函数的命名可能为了一致性和清晰性而改变
依赖项
~3MB
~57K SLoC