linux ebpf只能使用kprobe来监视内核函数吗?

wwodge7n  于 2022-11-22  发布在  Linux
关注(0)|答案(1)|浏览(101)

我想使用ebpf来监控Linux内核函数。现在,我使用bcc编写代码,如下所示:

#!/usr/bin/python3
# coding=utf-8
from bcc import BPF
from time import sleep
# define BPF program

bpf_program = """

int test_func(void  *ctx) {
    bpf_trace_printk("hello");
    return 0;
}
"""

# load BPF

b = BPF(text=bpf_program)
b.attach_kprobe(event="__x64_sys_getpid", fn_name="test_func")

while 1:
    sleep(100)
    b.trace_print()

这可以正常工作,我知道它是基于kprobe实现的。
但是我想知道我是否只能使用kprobe来监视ebpf中的任何内核函数?

xlpyo6sf

xlpyo6sf1#

大多数情况下。Kprobes可以连接到几乎任何函数,除了黑名单上的函数。
Kprobes可以探测内核中除自身之外的大部分内容。这意味着有些函数是kprobes无法探测的。探测(trapping)这类函数会导致递归陷阱(例如双重错误),或者嵌套的探测器处理程序可能永远不会被调用。Kprobes将这些函数作为黑名单来管理。如果您想将某个函数添加到黑名单中,您只需要(1)包含linux/kprobes. h和(2)使用NOKPROBE_SYMBOL()宏来指定一个黑名单函数。Kprobes会根据黑名单检查给定的探头地址,如果给定的地址在黑名单中,则拒绝注册它。

相关问题