#syscalls #tracing #strace #linux

nightly bin+lib hstrace

命令行和库中的系统调用跟踪

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 次下载

Apache-2.0/MIT

350KB
3.5K SLoC

系统调用跟踪 CLI & 库

Build Status Latest Version Rust Documentation License

命令行和库中的系统调用跟踪。查看设计草案:https://github.com/blaind/hstrace/blob/master/docs/01_hstrace_plan.md

这是一个工作实现,不是生产就绪。可能没有完成。存在多个问题:1) 代码库尚未准备好扩展,需要特别进行主要重构,特别是为了使 AVValue 结构体更通用,2) 连接到进程不是瞬时的,有些调用在开始时丢失,3) 并非所有系统调用都已实现,4) 缺少跨平台支持,5) 与 strace 代码库相比,总代码行数超过 200k LoC(包括注释),因此完成这项工作是一项相当大的工作

命令行工具

Syscall-output

安装二进制文件

$ 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