Skip to content

eBPF 开发实践教程:基于 CO-RE,通过小工具快速上手 eBPF 开发

这是一个基于 CO-RE(一次编译,到处运行)的 eBPF 的开发教程,提供了从入门到进阶的 eBPF 开发实践,包括基本概念、代码实例、实际应用等内容。和 BCC 不同的是,我们使用 libbpf、Cilium、libbpf-rs、eunomia-bpf 等框架进行开发,包含 C、Go、Rust 等语言的示例。

本教程不会进行复杂的概念讲解和场景介绍,主要希望提供一些 eBPF 小工具的案例(非常短小,从二十行代码开始入门!),来帮助 eBPF 应用的开发者快速上手 eBPF 的开发方法和技巧。教程内容可以在目录中找到,每个目录都是一个独立的 eBPF 工具案例。

教程关注于可观测性、网络、安全等等方面的 eBPF 示例。完整的代码和教程可以在 https://github.com/eunomia-bpf/bpf-developer-tutorial GitHub 开源仓库中找到。如果您认为本教程对您有所帮助,也请给我们一个 star 鼓励一下!

入门示例

这一部分包含简单的 eBPF 程序示例和介绍。主要利用 eunomia-bpf 框架简化开发,介绍 eBPF 的基本用法和开发流程。

  • lesson 0-introduce eBPF 示例教程 0:核心概念与工具简介
  • lesson 1-helloworld eBPF 入门开发实践教程一:Hello World,基本框架和开发流程
  • lesson 2-kprobe-unlink eBPF 入门开发实践教程二:在 eBPF 中使用 kprobe 监测捕获 unlink 系统调用
  • lesson 3-fentry-unlink eBPF 入门开发实践教程三:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用
  • lesson 4-opensnoop eBPF 入门开发实践教程四:在 eBPF 中捕获进程打开文件的系统调用集合,使用全局变量过滤进程 pid
  • lesson 5-uprobe-bashreadline eBPF 入门开发实践教程五:在 eBPF 中使用 uprobe 捕获 bash 的 readline 函数调用
  • lesson 6-sigsnoop eBPF 入门开发实践教程六:捕获进程发送信号的系统调用集合,使用 hash map 保存状态
  • lesson 7-execsnoop eBPF 入门实践教程七:捕获进程执行事件,通过 perf event array 向用户态打印输出
  • lesson 8-exitsnoop eBPF 入门开发实践教程八:在 eBPF 中使用 exitsnoop 监控进程退出事件,使用 ring buffer 向用户态打印输出
  • lesson 9-runqlat eBPF 入门开发实践教程九:捕获进程调度延迟,以直方图方式记录
  • lesson 10-hardirqs eBPF 入门开发实践教程十:在 eBPF 中使用 hardirqs 或 softirqs 捕获中断事件

高级文档和示例

我们开始构建完整的 eBPF 项目,主要基于 libbpf,并将其与各种应用场景结合起来,以便实际使用。

  • lesson 11-bootstrap eBPF 入门开发实践教程十一:在 eBPF 中使用 libbpf 开发用户态程序并跟踪 exec() 和 exit() 系统调用
  • lesson 12-profile eBPF 入门实践教程十二:使用 eBPF 程序 profile 进行性能分析
  • lesson 13-tcpconnlat eBPF入门开发实践教程十三:统计 TCP 连接延时,并使用 libbpf 在用户态处理数据
  • lesson 14-tcpstates eBPF入门实践教程十四:记录 TCP 连接状态与 TCP RTT
  • lesson 15-javagc eBPF 入门实践教程十五:使用 USDT 捕获用户态 Java GC 事件耗时
  • lesson 16-memleak eBPF 入门实践教程十六:编写 eBPF 程序 Memleak 监控内存泄漏
  • lesson 17-biopattern eBPF 入门实践教程十七:编写 eBPF 程序统计随机/顺序磁盘 I/O
  • lesson 18-further-reading 更多的参考资料:论文、项目等等
  • lesson 19-lsm-connect eBPF 入门实践教程:使用 LSM 进行安全检测防御
  • lesson 20-tc eBPF 入门实践教程二十:使用 eBPF 进行 tc 流量控制
  • lesson 21-xdp eBPF 入门实践教程二十一: 使用 XDP 进行可编程数据包处理

深入主题

这一部分涵盖了与 eBPF 相关的高级主题,包括在 Android 上使用 eBPF 程序、利用 eBPF 程序进行的潜在攻击和防御以及复杂的追踪。结合用户模式和内核模式的 eBPF 可以带来强大的能力(也可能带来安全风险)。

Android:

其他:

持续更新中...

bcc 和 bpftrace 教程与文档

Share on Share on