This crates provides Rust bindings for the [plthook] library.
Please see the [API documentation] and the description in the [plthook] library for more details.
To print symbols in the current process:
```rust use plthook::ObjectFile;
fn main() { let object = ObjectFile::openmainprogram().unwrap();
for symbol in object.symbols() {
println!("{:?} {:?}", symbol.func_address, symbol.name);
}
} ```
To replace a symbol:
```rust use libc::{cchar, cint}; use plthook::ObjectFile; use std::mem::MaybeUninit;
static mut ATOIFN: MaybeUninit
fn negatoi(nptr: *const cchar) -> cint { let i = unsafe { (ATOIFN.assume_init())(nptr) }; -i }
fn main() { let object = ObjectFile::openmainprogram().unwrap();
unsafe {
let atoi_fn = ATOI_FN.as_mut_ptr() as *mut _;
*atoi_fn = object.replace("atoi", neg_atoi as *const _).unwrap();
};
let i = unsafe { libc::atoi(b"100\0".as_ptr().cast()) };
assert_eq!(i, -100);
} ```