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]

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]

Enables or disables the detour.

Returns whether the detour is enabled or not.

Returns a reference to the generated trampoline.

Enables the detour.

Disables the detour

impl Drop for RawDetour
[src]

Disables the detour, if enabled.

impl Debug for RawDetour
[src]

Output whether the detour is enabled or not.

impl Send for RawDetour
[src]

impl Sync for RawDetour
[src]