1

我有一个案例,相同的函数出现在不同的内核模块中,在 /proc/kallsyms 中,例如,

address1 t 函数 [module1] address2 t 函数 [module2]

两个模块都加载在同一台机器上。然后我想用 ebpf 跟踪函数。

bpftrace kprobe 无法指定模块名称。

bpftrace -lv 'kprobe:function'

确实列出了 2 个探测器,但如果我运行 'bpftrace -e 'kprobe:function {...}'

它只连接 1 个探头。似乎它只附上了找到的第一个......

查看bcc 中的 libbpf.c, perf 事件 open syscall 似乎只接受函数名作为字符串,而不接受模块名或地址本身

在最新的 linux 内核 src 代码中,kprobe trace似乎具有支持函数名称和地址以及模块的数据结构,但实现时没有考虑模块。

实际上,Dtrace fbt 探针具有格式 provider:module:function,但是与 Dtrace 语法非常相似的 bpftrace 在 kprobe/kretprobe 提供程序中没有模块信息。

是因为 bcc 和内核 ebpf 不支持模块名称吗?

4

0 回答 0