__x64_sys_openat
是Linux 内核中某个函数的名称,BCC 附加了一个 kprobe。
sys_enter_openat
是 Linux 中跟踪点的名称,这意味着这是一个(或多或少)稳定的接口,您可以将其挂钩以进行跟踪,包括使用 eBPF 程序。您可以通过列出 下的条目来查看系统上的可用跟踪点/sys/kernel/debug/tracing/events/
。我认为 BCC 也有一个实用程序tplist
来帮助它。
如果可以选择,我建议尽可能挂在跟踪点上,因为它们往往比内核内部更稳定:例如,参数__x64_sys_openat
或该函数的名称可能会在不同的内核版本之间发生变化;或者名称会在其他架构上更改,等等。但是,跟踪点不太可能改变。请注意,对于带有 CO-RE 的 eBPF,内核内部的不稳定性在一定程度上得到了缓解。
那么并不总是可以挂钩到跟踪点:您只能使用内核中现有的跟踪点之一。如果您想挂钩到另一个不存在跟踪点的随机函数(并假设此函数在编译时未内联 - 通过在 中查找来检查/proc/kallsyms
),那么您想使用 kprobe。
有时您还需要特别注意钩住的位置。例如,对于安全用例(即阻止系统调用),系统调用跟踪点(或相应的内核函数,显然)并不总是最好的挂钩点,因为它们可能使您容易受到 TOCTOU 攻击。LSM 挂钩可能是该用例的一个很好的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句