【发布时间】:2021-08-18 07:44:00
【问题描述】:
我正在学习 eBPF,并且我知道我可以将我的 eBPF 程序附加到 kprobes、uprobes、tracepoints 等等。我看到 /sys/kernel/debug/tracing/events/ 下有一个跟踪点列表,我可以在其中附加 eBPF 程序。但是,我如何找到我可以破解的 kprobe 函数,比如与 TCP 相关的函数?另外,如何找到这些函数签名?
谢谢。
【问题讨论】:
我正在学习 eBPF,并且我知道我可以将我的 eBPF 程序附加到 kprobes、uprobes、tracepoints 等等。我看到 /sys/kernel/debug/tracing/events/ 下有一个跟踪点列表,我可以在其中附加 eBPF 程序。但是,我如何找到我可以破解的 kprobe 函数,比如与 TCP 相关的函数?另外,如何找到这些函数签名?
谢谢。
【问题讨论】:
您可以将 kprobe 附加到内核的几乎所有函数(前提是在编译内核时它们没有被内联)。列出这些函数的一种方法是通过 cat /proc/kallsyms。在您的情况下,该文件上的tcp grep ?至于签名,我认为除了阅读内核源代码为您的内核版本之外,没有其他地方可以获得它们。
请注意,由于内核函数不是用户 API 的一部分,因此无法保证其签名的稳定性(这可能是签名列表毫无意义的原因——除了大量的签名列出)。如果你希望你的 eBPF 程序在不同内核版本之间更加健壮和可移植,你应该看看CO-RE。
【讨论】:
/sys/kernel/debug/kprobes/blacklist 中的函数。见kernel.org/doc/html/latest/trace/kprobes.html#blacklist。