ebpf是否只能使用kprobe来监视内核函数?



我想使用ebpf监视一个Linux内核函数。现在,我像这样使用密件抄送编写代码:

#!/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中的任何内核函数?

大部分。Kprobes可以附加到几乎任何函数上,除了被列入黑名单的函数。

Kprobes可以探测除自身以外的大部分内核。这意味着kprobes无法探测某些函数。探测(捕获)这样的函数可能会导致递归陷阱(例如双重错误),或者嵌套的探测处理程序可能永远不会被调用。Kprobes管理诸如黑名单之类的功能。如果您想将一个函数添加到黑名单中,您只需要(1)包含linux/kprobes.h和(2)使用NOKPROBE_SYMBOL()宏来指定一个列入黑名单的函数。Kprobes根据黑名单检查给定的探测地址,如果给定的地址在黑名单中,则拒绝注册它。

相关内容

  • 没有找到相关文章

最新更新