说明
通过查看 /sys/kernel/debug/tracing/events/raw_syscalls
目录,你可以获取系统中所有可用的 raw_tracepoint
的列表。
请注意,访问 /sys/kernel/debug/tracing
目录通常需要 root 权限或者在调试组中的用户权限。因此,你可能需要以超级用户(root)或使用 sudo
来执行上述命令。
希望这能帮助你在 Linux 系统上查看系统中的 raw_tracepoint
,而无需依赖第三方工具。在当前目录下查看,可以看到如下的文件:1
2
3
4
5
6
7
8# ls -al /sys/kernel/debug/tracing/events/raw_syscalls/
total 0
drwxr-x--- 4 root root 0 7月 27 10:17 .
drwxr-x--- 123 root root 0 7月 27 10:17 ..
-rw-r----- 1 root root 0 7月 27 10:17 enable
-rw-r----- 1 root root 0 7月 27 10:17 filter
drwxr-x--- 2 root root 0 7月 27 10:17 sys_enter
drwxr-x--- 2 root root 0 7月 27 10:17 sys_exit
可以看到,在当前的目录下,存在两个raw_tracepoint
类型的系统调用,分别是sys_enter
和sys_exit
。一般情况下,在Linux
默认情况下,都会存在sys_enter
和sys_exit
,这两个raw_tracepoint
类型的系统调用。
Raw Tracepoint 是一种更底层的跟踪机制,它允许开发人员在内核中的任意位置定义自定义的跟踪事件。Raw Tracepoint 提供了更大的灵活性,因为开发人员可以在内核的任意代码路径中插入跟踪点,以捕获感兴趣的事件。与 Tracepoint 不同,Raw Tracepoint 的定义和触发点是在内核编译时生成的,而不是在源代码中静态定义的。开发人员可以使用 tracepoint.h 头文件中的宏来定义和触发 Raw Tracepoint。
sys_enter
/sys/kernel/debug/tracing/events/raw_syscalls/sys_enter
查看目录下具体的内容:
1 | total 0 |
每个文件的含义如下:
enable
: 用于启用或禁用sys_enter
事件的跟踪。通过向该文件写入1
或0
来启用或禁用跟踪。filter
: 用于设置sys_enter
事件的过滤器。你可以将过滤条件写入该文件,以便只跟踪满足条件的sys_enter
事件。format
: 包含了sys_enter
事件的格式定义。你可以读取该文件来获取sys_enter
事件的参数和输出格式。hist
: 包含了sys_enter
事件的历史记录,包括每个事件的计数和时间戳等信息。id
: 包含了sys_enter
事件的唯一标识符。inject
: 用于触发sys_enter
事件的注入。通过向该文件写入相应的值,可以手动触发sys_enter
事件。trigger
: 用于触发sys_enter
事件的触发器。通过向该文件写入相应的值,可以触发sys_enter
事件。
针对其中的几个主要文件进行分析:
format
1 | name: sys_enter |
通过print fmt
,可以看到具体的输出格式,NR
表示系统调用号,后面的%lx
表示具体的参数,REC->args[0]
表示第一个参数,REC->args[1]
表示第二个参数,以此类推。
在内核文件 syscalls.h 中也可以找到对应的定义。
1 |
|
内核态
为了方便演示raw_tracepoint
的功能,
参考
https://mozillazg.com/2022/05/ebpf-libbpf-raw-tracepoint-common-questions-en.html