#hook #function #redirect #macro #detour

retour-utils

使用 retour 创建钩子的实用工具包

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 日

#2525Rust 模式

Download history 6/week @ 2024-03-08 8/week @ 2024-03-29

每月 56 次下载

BSD-2-Clause 许可

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