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

which kprobe hooks can I attach eBPF programs to?

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

谢谢。

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

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