linux-kernel - ebpf:拦截函数调用

标签 linux-kernel system-calls bpf kprobe ebpf

我正在阅读有关 kprobes BPF 程序类型的信息,我想知道是否有可能不仅拦截函数调用以进行跟踪或收集一些低级信息(寄存器、堆栈等) ,但替换调用并执行而不是实际函数?

kprobe 是否提供此功能,或者我正在寻找错误的工具?

最佳答案

不,kprobes BPF 程序只能读取系统调用参数和返回值,它们不能修改寄存器,因此不能拦截函数调用。这是 BPF 验证器强加的限制。

但是,

内核模块可以使用 kprobes 拦截函数调用。

关于linux-kernel - ebpf:拦截函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49319439/

相关文章:

linux - Linux 进程/线程可以在不通过 do_exit() 的情况下终止吗?

c - 在内联 C 程序集中执行系统调用会导致段错误

c - Net raid FS with FUSE, gcc -hello.c -o a.out, a.out 不可执行

c - 如何使用 SECCOMP_RET_DATA 和 PTRACE_GETEVENTMSG 获取系统调用的返回码

c - 使用 Linux AIO 写入 eventfd

c - Linux 内核中的工作队列实现

linux - 在 Linux 内核中找不到方法 __kernel_vsyscall

c++ - 在 C++ 中使用 ioprio_set

BPF 验证器在尝试访问 __sk_buff 成员时拒绝

bpf - "Program too large"阈值大于实际指令数