#hook #function #macro #redirect #detour

retour-utils-impl

retour-utils 设计的宏库

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

BSD-2-Clause许可证

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