假设您有 2 个 eBPF 程序,其中一个是
BPF_PROG_TYPE_TRACEPOINT
类型,另一个是 BPF_PROG_TYPE_KPROBE
类型。跟踪点附加到 sys_enter_execve
并且 kprobe 将附加到同一个系统调用。
这里有特定的执行顺序吗?我假设跟踪点在内核进入系统调用之前附加,而 kprobe 附加在系统调用的确切入口点上,但我不太确定,也找不到有关它的文档。
特别是对于系统调用挂钩,首先触发原始跟踪。原始跟踪点 sys_enter 在所有系统调用(do_syscall_x64 ...)的入口点指定,然后被分派到实际处理程序(例如:__x64_sys_execve 或 __ia32_sys_execve)。
自行仔细检查: https://elixir.bootlin.com/linux/v5.8/source/arch/x86/entry/common.c#L368