【问题标题】:Can ebpf only use kprobe to monitor kernel functions?ebpf只能用kprobe监控内核函数吗?
【发布时间】:2022-11-18 01:10:44
【问题描述】:

我想使用 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中的任何内核函数?

【问题讨论】:

    标签: linux kernel ebpf kprobe


    【解决方案1】:

    大多。除了 blacklisted 函数之外,Kprobes 几乎可以附加到任何函数。

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

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 2020-08-22
      • 2013-01-06
      • 2021-08-18
      • 2023-03-29
      相关资源
      最近更新 更多