Struct detour::RawDetour
[−]
[src]
pub struct RawDetour { /* fields omitted */ }
A type-less detour.
Example
use std::mem; use detour::{Detour, RawDetour}; fn add5(val: i32) -> i32 { val + 5 } fn add10(val: i32) -> i32 { val + 10 } let mut hook = unsafe { RawDetour::new(add5 as *const (), add10 as *const ()).unwrap() }; assert_eq!(add5(5), 10); assert_eq!(hook.is_enabled(), false); unsafe { hook.enable().unwrap(); assert!(hook.is_enabled()); let original: fn(i32) -> i32 = mem::transmute(hook.trampoline()); assert_eq!(add5(5), 15); assert_eq!(original(5), 10); hook.disable().unwrap(); } assert_eq!(add5(5), 10);
Methods
impl RawDetour
[src]
unsafe fn new(target: *const (), detour: *const ()) -> Result<Self>
Constructs a new inline detour patcher.
The hook is disabled by default. Even when this function is succesful, there is no guaranteee that the detour function will actually get called when the target function gets called. An invocation of the target function might for example get inlined in which case it is impossible to hook at runtime.
Trait Implementations
impl Detour for RawDetour
[src]
unsafe fn toggle(&mut self, enabled: bool) -> Result<()>
Enables or disables the detour.
fn is_enabled(&self) -> bool
Returns whether the detour is enabled or not.
fn trampoline(&self) -> &()
Returns a reference to the generated trampoline.
unsafe fn enable(&mut self) -> Result<()>
Enables the detour.
unsafe fn disable(&mut self) -> Result<()>
Disables the detour
impl Drop for RawDetour
[src]
fn drop(&mut self)
Disables the detour, if enabled.