我正在学习eBPF,我知道我可以将我的eBPF程序附加到kprobes、uprobes、tracepoints等。我看到在/sys/kernel/debug/tracing/events/下有一个for跟踪点的列表,我可以将eBPF程序附加到其中。但是,我如何找到我可以侵入的kprobe函数,比如与TCP相关的函数?另外,如何找到这些函数签名?
谢谢。
您可以将kprobe附加到内核的几乎所有函数(前提是在编译内核时它们没有内联(。列出这些函数的一种方法是通过cat /proc/kallsyms
。在您的情况下,该文件上的tcp
的grep?至于签名,我认为除了读取内核版本的内核源之外,没有其他地方可以获得它们。
请注意,由于内核函数不是用户API的一部分,因此无法保证其签名的稳定性(这可能是签名列表除了要列出大量签名之外几乎没有意义的原因(。如果你想让eBPF程序在不同的内核版本之间更加健壮和可移植,你应该看看CO-RE。