AFAIK 不同的 Linux 跟踪工具从记录不同事件的 /sys/kernel/debug/tracing/events 目录收集信息。谁能解释“syscalls”事件和“raw_syscalls”事件之间的区别?
如果我想记录系统上当前调用的所有系统调用,我想知道这种差异,以便找出要跟踪的事件。我知道有像 strace 和 perf trace 这样的工具,但我想创建自己的工具。
答案1
该syscalls
组针对每个特定的系统调用都有单独的事件,并根据该系统调用跟踪参数。
sys_enter
和事件sys_exit
跟踪raw_syscalls/
发生的每个系统调用,但它只能显示系统调用号和参数的值,而不显示它们的名称。
至于哪一个更适合实现类似的工具strace
,syscalls
您可以轻松地显示有关系统调用的基本信息(即系统调用名称、参数名称和原始参数值)。
strace
但是,请注意,与通过附加ptrace
到程序中的工具所获得的信息相比,这些信息非常少。这是因为在syscalls
事件中,内核不会取消引用传递给系统调用的任何指针,而 withptrace
可以strace
完全访问程序的内存,并且可以随意取消引用参数。