7 个版本 (2 个稳定版)
使用旧的 Rust 2015
2.0.0 | 2020年9月13日 |
---|---|
1.0.0 | 2019年3月31日 |
0.1.2 | 2018年6月5日 |
0.1.1 | 2016年3月30日 |
0.0.2 | 2015年4月25日 |
#1 in #ld-preload
每月下载量 300
被 6 个 包使用(直接使用 4 个)
8KB
115 行
redhook
redhook 是一个用于在 Rust 中编写拦截库(LD_PRELOAD,DYLD_INSERT_LIBRARIES 等)的辅助库。
要使用 redhook,编辑您的 Cargo.toml
文件,将其作为依赖项添加,并将您的库配置为构建为 dylib
[dependencies]
redhook = "2.0"
[lib]
name = "mylib"
crate_type = ["dylib"]
然后使用 hook!
宏声明您要挂钩的函数以及您要给钩子函数起的名字
redhook::hook! {
unsafe fn existing_function(x: i32) -> i32 => my_function {
42
}
}
要访问底层函数,使用 redhook::real!(现有函数)
。
按常规构建您的库,找到位于 target
目录中的结果 .so
文件(或 macOS 上的 .dylib
),并将环境变量 LD_PRELOAD
(或 DYLD_INSERT_LIBRARIES
)设置为该文件。
(您也可以使用不带 Cargo 的 redhook,通过 rustc --crate-type=dylib
。)
包含了一些作为独立库的 示例
geofft@cactuar:~/src/rust/redhook/examples/readlinkspy$ cargo build
Compiling redhook v0.0.1 (file:///home/geofft/src/rust/redhook/examples/readlinkspy)
Compiling redhook_ex_readlinkspy v0.0.1 (file:///home/geofft/src/rust/redhook/examples/readlinkspy)
geofft@cactuar:~/src/rust/redhook/examples/readlinkspy$ LD_PRELOAD=target/debug/libreadlinkspy.so ls -l /bin/sh
readlink("/bin/sh")
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
geofft@cactuar:~/src/rust/redhook/examples/fakeroot$ cargo build
geofft@cactuar:~/src/rust/redhook/examples/fakeroot$ LD_PRELOAD=target/debug/libfakeroot.so id
uid=0(root) gid=1001(geofft) euid=1001(geofft) groups=1001(geofft),27(sudo),111(sbuild)
redhook 目前支持在 glibc(GNU/Linux)上构建用于 LD_PRELOAD
的拦截库,以及在 Apple 的 libc(macOS)上构建用于 DYLD_INSERT_LIBRARIES
的拦截库。如果您对其他平台的支持感兴趣,请提交问题或拉取请求。
redhook 以纽约布鲁克林的红钩区命名。实现的部分借鉴了 @Kimundi 的 lazy_static!
宏中的概念。
redhook 是免费软件,可在 2-clause BSD 许可证 的条款下使用。
最低支持的 Rust 版本:1.32
依赖项
~43KB