如何使用Berkeley Packet Filter(BPF)过滤内核中的函数参数?该函数应该是任何非内联函数,而不仅仅是系统调用。此外,最好可以取消引用函数参数中的指针进行验证。
我在互联网上搜索但找不到任何用例。大多数材料仅描述了如何使用seccomp / seccomp-BPF。
似乎整合了eBPF和kprobe / jprobe来实现挂钩。但我无法在网上找到一个好的例子。
答案 0 :(得分:3)
eBPF 可能就是您想要的。如果您还没有找到它们,则应该查看the bcc (BPF Compiler Collection) tools提供的示例。
特别是,the example tool argdist
确实依赖于kprobes而且可能对您有一些兴趣:
argdist探测您指定的函数并将参数值收集到a中 直方图或频率计数。这可以用来理解分布 值的某个参数需要,过滤和打印有趣的参数 无需附加调试器,并获取常规执行统计信息 各种功能。
例如,假设您要查找常见的分配大小 你的申请:
# ./argdist -p 2420 -C 'p:c:malloc(size_t size):size_t:size' [01:42:29] p:c:malloc(size_t size):size_t:size COUNT EVENT [01:42:30] p:c:malloc(size_t size):size_t:size COUNT EVENT
[...]
(摘自argdist example uses)。
为了记录,我到目前为止发现的大多数eBPF示例都位于其中一个位置:
linux/samples/bpf
下。bcc/tools
目录中。tc
的网络示例,位于iproute2包源中的iproute2/examples/tc
目录下。)