Struct detour::RawDetour [−][src]
pub struct RawDetour(_);
A raw detour.
Example
use detour::RawDetour; use std::mem; 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 ())? }; assert_eq!(add5(5), 10); assert_eq!(hook.is_enabled(), false); unsafe { hook.enable()? }; assert!(hook.is_enabled()); let original: fn(i32) -> i32 = unsafe { mem::transmute(hook.trampoline()) }; assert_eq!(add5(5), 15); assert_eq!(original(5), 10); unsafe { hook.disable()? }; assert_eq!(add5(5), 10);
Implementations
impl RawDetour
[src]
impl RawDetour
[src]pub unsafe fn new(target: *const (), detour: *const ()) -> Result<Self>
[src]
pub unsafe fn new(target: *const (), detour: *const ()) -> Result<Self>
[src]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.
pub fn is_enabled(&self) -> bool
[src]
pub fn is_enabled(&self) -> bool
[src]Returns whether the detour is enabled or not.
pub fn trampoline(&self) -> &()
[src]
pub fn trampoline(&self) -> &()
[src]Returns a reference to the generated trampoline.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for RawDetour
impl Send for RawDetour
impl Sync for RawDetour
impl Unpin for RawDetour
impl !UnwindSafe for RawDetour
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> Same<T> for T
impl<T> Same<T> for T
type Output = T
type Output = T
Should always be Self