我可以将 eBPF 程序附加到哪些 kprobe 钩子上?

问题描述

我正在学习 eBPF,并且我知道我可以将我的 eBPF 程序附加到 kprobes、uprobes、tracepoint 等。我看到 /sys/kernel/debug/tracing/events/ 下有一个跟踪点列表,我可以将 eBPF 程序附加到其中。但是,我如何找到我可以闯入的 kprobe 函数,比如与 TCP 相关的函数?另外,我如何找到这些函数签名?

谢谢。

解决方法

您可以将 kprobe 附加到内核的几乎所有功能(前提是它们在编译内核时没有被内联)。列出这些函数的一种方法是通过 cat /proc/kallsyms。在您的情况下,该文件上的 tcp 是 grep 吗?至于签名,我认为除了阅读内核源代码之外,没有其他地方可以获得它们。

请注意,由于内核函数不是用户 API 的一部分,因此无法保证其签名的稳定性(这可能是签名列表毫无意义的一个原因——除了大量的签名列出)。如果您希望 eBPF 程序在不同内核版本之间更加健壮和可移植,您应该查看 CO-RE