Kprobe与Tracepoint哪个先触发?同一系统调用的eBPF程序执行顺序问询
Tracepoint与Kprobe挂载同一系统调用的执行顺序
当你将Tracepoint挂载到sys_enter_execve,同时把Kprobe挂载到sys_execve(或对应架构的具体实现如__x64_sys_execve)时,二者存在固定的执行顺序:Tracepoint会先于Kprobe触发。
原因源于内核处理系统调用的流程逻辑:
sys_enter系列Tracepoint是内核为系统调用入口设置的统一追踪点,触发时机是在用户态进入内核后、尚未跳转到具体系统调用实现函数之前,属于系统调用入口的通用处理环节,所有系统调用都会经过这个节点。- Kprobe挂载的是具体系统调用函数的入口地址,只有当内核流程真正进入该系统调用的实现代码时,才会触发对应的Kprobe。
以x86_64架构的实际执行流程为例:
- 用户态发起execve系统调用,陷入内核
- 内核执行系统调用入口的通用逻辑,触发
sys_enter_execveTracepoint - 内核通过系统调用表找到
__x64_sys_execve函数并跳转至该函数 - 函数入口处触发挂载的Kprobe
你的推测方向是正确的,Tracepoint确实在进入系统调用的更早阶段触发,而Kprobe则在具体系统调用函数的精确入口点触发。
内容的提问来源于stack exchange,提问作者Parker
相关产品推荐
相关产品推荐

