开发者通常使用受限的 C 语言子集编写 eBPF 程序,通过 LLVM/Clang 编译为 eBPF 字节码(ELF 目标文件)。编译时需开启调试信息(如 -g)以便生成 CO-RE 所需的 BTF 重定位信息。
用户态加载器通过 bpf() 系统调用将字节码提交给内核,内核验证器先进行安全检查,通过后由 JIT 编译为本机指令,再由加载器将程序挂载到指定 Hook 点。libbpf 等库封装了这一编译、重定位、验证、挂载的完整生命周期。
调试阶段可借助 bpftrace 快速验证追踪逻辑,或使用 execsnoop、bpftrace 内置工具观察内核与用户态行为。内核态程序通过 Map 或 perf-event 将结果回传用户态,开发者据此读取统计信息、事件详情进行问题定位。