You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

eBPF验证器报错:BTF类型ID未找到及kprobe挂载失败问题

解决《Learning eBPF》第7章hello.bpf.c的execve探针问题

针对你在Ubuntu 20.04(5.15.0-88-generic)环境下遇到的两个问题,给出具体解决方案:

1. 修复fentry探针的BTF类型ID错误

你的环境中内核未导出do_execve的BTF符号,原因是Ubuntu 5.15内核中,用户态execve系统调用的实际内核入口已变为__do_execve_file而非do_execve。

修改代码中的fentry探针定义:

// 原代码
SEC("fentry/do_execve")
int BPF_PROG(fentry_do_execve, const char *filename,
            const char __user *const __user *argv,
            const char __user *const __user *envp)
{
    // ... 原有逻辑
}

// 修改为
SEC("fentry/__do_execve_file")
int BPF_PROG(fentry_do_execve, struct file *file,
            const char __user *const __user *argv,
            const char __user *const __user *envp,
            int flags)
{
    // ... 原有逻辑(可根据新参数调整输出)
}

注意:__do_execve_file的参数签名与do_execve不同,需要同步调整函数参数列表。

2. 修复kprobe无法创建perf事件的问题

do_execve确实在当前内核中被内联优化,符号已不存在。同样需要将kprobe目标切换为__do_execve_file:

修改kprobe探针定义:

// 原代码
SEC("kprobe/do_execve")
int BPF_KPROBE(kprobe_do_execve, const char *filename,
              const char __user *const __user *argv,
              const char __user *const __user *envp)
{
    // ... 原有逻辑
}

// 修改为
SEC("kprobe/__do_execve_file")
int BPF_KPROBE(kprobe_do_execve, struct file *file,
              const char __user *const __user *argv,
              const char __user *const __user *envp,
              int flags)
{
    // ... 原有逻辑(可根据新参数调整输出)
}

验证步骤

  1. 确认内核符号存在:

    cat /proc/kallsyms | grep __do_execve_file
    

    应有类似输出(地址可能不同):

    ffffffffa02b3400 T __do_execve_file
    
  2. 确认BTF符号存在:

    bpftool btf dump file /sys/kernel/btf/vmlinux format raw | grep -i __do_execve_file
    
  3. 用bpftrace测试探针可用性:

    bpftrace -e 'kprobe:__do_execve_file { printf("execve triggered\n"); }'
    

    打开另一个终端执行ls等命令,若能看到输出则说明探针可用。

额外检查

确保内核配置开启了必要选项:

zcat /proc/config.gz | grep -E "CONFIG_DEBUG_INFO_BTF|CONFIG_KPROBES|CONFIG_FENTRY"

输出应包含:

CONFIG_DEBUG_INFO_BTF=y
CONFIG_KPROBES=y
CONFIG_FENTRY=y

内容的提问来源于stack exchange,提问作者asr9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:12:19