5 个版本
0.0.5 | 2021 年 4 月 11 日 |
---|---|
0.0.4 | 2021 年 4 月 11 日 |
0.0.3 | 2020 年 2 月 16 日 |
0.0.2 | 2020 年 2 月 16 日 |
0.0.1 | 2020 年 2 月 16 日 |
#409 in 调试
每月 26 次下载
350KB
3.5K SLoC
系统调用跟踪 CLI & 库
命令行和库中的系统调用跟踪。查看设计草案:https://github.com/blaind/hstrace/blob/master/docs/01_hstrace_plan.md
这是一个工作实现,不是生产就绪。可能没有完成。存在多个问题:1) 代码库尚未准备好扩展,需要特别进行主要重构,特别是为了使 AV
和 Value
结构体更通用,2) 连接到进程不是瞬时的,有些调用在开始时丢失,3) 并非所有系统调用都已实现,4) 缺少跨平台支持,5) 与 strace
代码库相比,总代码行数超过 200k LoC(包括注释),因此完成这项工作是一项相当大的工作
命令行工具
安装二进制文件
$ cargo install hstrace
运行命令
$ hstrace -h
hstrace for stracing processes
USAGE:
hstrace [FLAGS] [OPTIONS] <prog>...
FLAGS:
-h, --help Prints help information
--no-follow Do not follow child processes as they are created
-V, --version Prints version information
OPTIONS:
-e <expr> Expression
-m <mode> Run mode [default: strace]
-o <file> Save output to a file instead of stderr. If suffix is `.json`, will be stored in JSON-format
(format subject to change)
-p <pid> PID to trace
-s <strsize> Maximum length of printable strings [default: 32]
ARGS:
<prog>... Program to strace
跟踪库
用法
将其添加到您的 Cargo.toml
[dependencies]
hstrace = "0.0.4"
并将其添加到您的代码中
use hstrace::prelude::*;
fn main() {
let mut tracer = HStraceBuilder::new().program("ps").arg("uxaw").build();
tracer.start().unwrap();
for syscall in tracer.iter_as_syscall() {
match syscall.name {
hstrace::Ident::Openat | hstrace::Ident::Fstat | hstrace::Ident::Stat => {
println!("File operation detected: {:?}", syscall);
}
hstrace::Ident::Socket | hstrace::Ident::Bind | hstrace::Ident::Connect => {
println!("Network operation detected: {:?}", syscall);
}
_ => (),
}
}
}
请参阅 examples/03_match_syscall_name.rs 和其他 示例。
许可证
根据您的选择,在 Apache License, Version 2.0 或 MIT 许可证下授权。除非您明确声明,否则根据 Apache-2.0 许可证定义,您提交的任何旨在包含在此crate中的有意贡献,都将根据上述方式双许可,而无需任何额外条款或条件。
依赖项
~7–18MB
~241K SLoC