Crate rhook[−][src]
Rhook
Hook libc functions with an easy API
Usage
1- Import the trait RunHook
2- Create an Command with Command::new and add hooks to it via add_hook and add_hooks methods
3- Confirm the hooks with set_hooks method this step is necessary
4- Now you can carry on with the usual Command methods (output, spawn,status,..)
Example
Say you want to limit the bandwidth of a program
Usually downloading calls libc::recv
function
So our goal is to throttle it with a simple sleep
To do that with this crate: (taking speedtest program as an example)
1- Check its manpage https://man7.org/linux/man-pages/man2/recv.2.html to see what the function’s input/output
2- use this crate
use rhook::{RunHook, Hook}; std::process::Command::new("speedtest").add_hook(Hook::Recv(stringify!(|sockfd, buf, len, flags|{ std::thread::sleep_ms(10); original_recv(sockfd, buf, len, flags) }))).set_hooks().unwrap().spawn();
Thats it!
Note that you have acess inside the closure to the original function denoted by the prefix
original_
+ the function name
Couple of points:
- If you take ownership of an input value inside of the closure, be sure to use ManuallyDrop so you don’t free it
Check out the examples for more info
Enums
Hook | libc hooks enum |
Traits
RunHook | Specify libc hooks for a Command |