Crates.io | retour-utils |
lib.rs | retour-utils |
version | 0.2.1 |
source | src |
created_at | 2023-02-16 11:10:08.787153 |
updated_at | 2023-07-05 04:34:16.063767 |
description | Utility crate for creating hooks with `retour` |
homepage | https://github.com/Hpmason/retour-utils |
repository | https://github.com/Hpmason/retour-utils |
max_upload_size | |
id | 786666 |
size | 34,801 |
This crate is meant to help creating detours with the retour crate. If you're creating lots of detours, it's very repetitive, so this crate adds some a few helper functions and macro to greatly simplify/streamline the process.
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()
This is very much in the early stages, with some noticable rough areas