将bpf附加到kprobe,可通过/ proc / kallsyms获得

问题描述 投票:1回答:1

我正在尝试构建一个工具,在其中我将BPF程序附加到所有系统调用的入口点。通过CLI,我可以通过

附加到所有系统调用条目
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_* /comm != "bpftrace"/ {printf("Process Name: %s\nSyscall Requested: %s\n", comm, probe);}'

很好,但是我想做更复杂的事情。我发现我可以使用python的前端将BPF程序附加到kprobe事件-

#!/usr/bin/python

from bcc import BPF

prog = """
int hello(void *ctx){
    bpf_trace_printk("Hello, world!\\n");
    return 0;
}
"""

b = BPF(text=prog)
b.attach_kprobe(event="__x64_sys_clone", fn_name="hello)

print("TIME(s)", "COMM", "PID", "MESSAGE")

while 1:
    try:
        (task, pid, cpu, flags, ts, msg) = b.trace_fields()
    except ValueError:
        continue
    except KeyboardInterrupt:
        exit()
    printb(b"%-18.9f %-16s %-6d %s" %(ts, task, pid, msg))

但是,在attach_kprobe行中,我想附加到所有syscall条目,而不是sys_clone。我没有在/sys/kernel/debug/tracing/available_filter_functions中找到任何sys_enter跟踪点,但是,我在/proc/kallsyms中找到了__tracepoint_sys_enter。但是,当我尝试用__tracepoint_sys_enter替换__x64_sys_clone时,出现了无效的参数错误。我想知道,我可以使用kprobes附加到所有syscall条目(并最终退出)吗?还是我需要使用其他跟踪机制。谢谢!

trace ebpf kprobe bcc-bpf
1个回答
0
投票
称为BPF.get_kprobe_functions()的函数,您可以执行此操作。您可以在密件抄送的BPF.get_kprobe_functions()中查看用法示例。我猜想bpftrace在给它一个模式时会做一些非常相似的事情。
© www.soinside.com 2019 - 2024. All rights reserved.