A Rust port of fishhook — a library that enables dynamically rebinding symbols
in Mach-O binaries at runtime. Useful for intercepting system functions like malloc
, free
, or open
on Apple
platforms.
Platform support: Currently tested only on macOS (aarch64-apple-darwin)
Add to your Cargo.toml
:
[dependencies]
fishhook = "0.1"
Example below uses ctor for invoking init() first
use fishhook::{register, Rebinding};
#[ctor::ctor]
fn init() {
unsafe {
register(vec![
Rebinding {
name: "malloc".to_string(),
function: my_malloc as *const c_void,
},
Rebinding {
name: "calloc".to_string(),
function: my_calloc as *const c_void,
},
Rebinding {
name: "realloc".to_string(),
function: my_realloc as *const c_void,
},
Rebinding {
name: "free".to_string(),
function: my_free as *const c_void,
},
Rebinding {
name: "atexit".to_string(),
function: my_exit as *const c_void,
},
]);
}
}
License: MIT