ZhangHanDong / tao-of-rust-codes

《Rust编程之道》随书源码
https://ruststudy.github.io/tao_of_rust_docs/tao_of_rust/
MIT License
1.18k stars 170 forks source link

问题:如何正确地hook系统函数? #329

Closed loongs-zhang closed 2 years ago

loongs-zhang commented 2 years ago
fn abs(i: i32) -> i32 {
    unsafe {
        let original = libc::dlsym(libc::RTLD_DEFAULT, "abs".as_ptr() as *const _)
            as *mut fn(i32) -> i32;
        //如何正确地hook系统函数abs?
//这里会调用失败
        let result = (*original)(i);
        println!("{}", result);
        result
    }
}

fn main() {
    println!("{}", abs(-1));
}
ZhangHanDong commented 2 years ago

你要通过 ffi 来调用

use std::os::raw::c_int;
// import an external function from libc
extern "C" {
    fn abs(args: c_int) -> c_int;
}