ebpf环境搭建及tracepoint内核调试sys_enter_write
前言:解决某个进程强制kill的问题,这边记录下搭建ebpf环境搭建及tracepoint内核调试sys_enter_write
参考文章:https://www.cnxct.com/an-applied-introduction-to-ebpf-with-go/
搭建eunomia-bpf编译工具链
编译器工具链ecc
编译器工具链ecc,用于将eBPF内核代码编译为config文件或WASM模块
ecli
搭建ecli工具,用于运行eBPF程序
配置编译运行环境
sudo apt install clang llvm
运行hello world
简单的 eBPF 程序开始,它会在内核中打印一条消息
/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ #define BPF_NO_GLOBAL_DATA #include <linux/bpf.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> typedef unsigned int u32; typedef int pid_t; const pid_t pid_filter = 0; char LICENSE[] SEC("license") = "Dual BSD/GPL"; SEC("tp/syscalls/sys_enter_write") int handle_tp(void *ctx) { pid_t pid = bpf_get_current_pid_tgid() >> 32; if (pid_filter && pid != pid_filter) return 0; bpf_printk("BPF triggered sys_enter_write from PID %d.\n", pid); return 0; }
使用 eunomia-bpf 的编译器工具链将其编译为 bpf 字节码文件
./ecc minimal.bpf.c
使用 ecli 工具加载并运行该程序
./ecli run package.json
通过观察trace_pipe 文件来查看 eBPF 程序的输出,如下图所示
cat /sys/kernel/debug/tracing/trace_pipe
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY