系统调用和 raw_syscalls 事件之间的区别?

系统调用和 raw_syscalls 事件之间的区别?

AFAIK 不同的 Linux 跟踪工具从记录不同事件的 /sys/kernel/debug/tracing/events 目录收集信息。谁能解释“syscalls”事件和“raw_syscalls”事件之间的区别?

如果我想记录系统上当前调用的所有系统调用,我想知道这种差异,以便找出要跟踪的事件。我知道有像 strace 和 perf trace 这样的工具,但我想创建自己的工具。

答案1

syscalls组针对每个特定的系统调用都有单独的事件,并根据该系统调用跟踪参数。

sys_enter和事件sys_exit跟踪raw_syscalls/发生的每个系统调用,但它只能显示系统调用号和参数的值,而不显示它们的名称。

至于哪一个更适合实现类似的工具stracesyscalls您可以轻松地显示有关系统调用的基本信息(即系统调用名称、参数名称和原始参数值)。

strace但是,请注意,与通过附加ptrace到程序中的工具所获得的信息相比,这些信息非常少。这是因为在syscalls事件中,内核不会取消引用传递给系统调用的任何指针,而 withptrace可以strace完全访问程序的内存,并且可以随意取消引用参数。

相关内容