retour-utils

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.

Example

```rust use retourutils::hookmodule;

[hook_module("lua52.dll")]

mod lua { // #[hookmodule] will create this // const MODULENAME: &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

}

// #[hookmodule] creates a init_hooks function that initializes and enables all the hooks lua::inithooks().unwrap() ```

This is very much in the early stages, with some noticable rough areas - Only supports windows atm - No docs yet - Naming of macros and fns likely to change for consistency/clarity