mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-02-03 10:14:44 +08:00
Add advance topics
This commit is contained in:
37
README.md
37
README.md
@@ -1,18 +1,22 @@
|
||||
# eBPF 开发者教程:通过小工具一步步学习 eBPF
|
||||
# eBPF 开发者教程与知识库:通过小工具一步步学习 eBPF
|
||||
|
||||
[](https://github.com/eunomia-bpf/bpf-developer-tutorial/actions/workflows/main.yml)
|
||||
|
||||
[GitHub](https://github.com/eunomia-bpf/bpf-developer-tutorial)
|
||||
[Gitee 镜像](https://gitee.com/yunwei37/bpf-developer-tutorial)
|
||||
|
||||
这是一个基于 `CO-RE`(一次编译,到处运行)的 eBPF 的开发教程,提供了从入门到进阶的 eBPF 开发实践,包括基本概念、代码实例、实际应用等内容。
|
||||
这是一个基于 `CO-RE`(一次编译,到处运行)的 eBPF 的开发教程,提供了从入门到进阶的 eBPF 开发实践,包括基本概念、代码实例、实际应用等内容。和 BCC 不同的是,我们使用 libbpf、Cilium、libbpf-rs、eunomia-bpf 等框架进行开发,包含 C、Go、Rust 等语言的示例。
|
||||
|
||||
本教程不会进行复杂的概念讲解和场景介绍,主要希望提供一些 eBPF 小工具的案例(**非常短小,从二十行代码开始入门!**),来帮助 eBPF 应用的开发者快速上手 eBPF 的开发方法和技巧。教程内容可以在目录中找到,每个目录都是一个独立的 eBPF 工具案例。
|
||||
|
||||
教程关注于可观测性、网络、安全等等方面的 eBPF 应用。
|
||||
教程关注于可观测性、网络、安全等等方面的 eBPF 示例。
|
||||
|
||||
## 目录
|
||||
|
||||
### 入门文档
|
||||
|
||||
包含简单的 eBPF 程序样例与介绍。
|
||||
|
||||
- [lesson 0-introduce](src/0-introduce/README.md) 介绍 eBPF 的基本概念和常见的开发工具
|
||||
- [lesson 1-helloworld](src/1-helloworld/README.md) 使用 eBPF 开发最简单的「Hello World」程序,介绍 eBPF 的基本框架和开发流程
|
||||
- [lesson 2-kprobe-unlink](src/2-kprobe-unlink/README.md) 在 eBPF 中使用 kprobe 捕获 unlink 系统调用
|
||||
@@ -26,9 +30,9 @@
|
||||
- [lesson 10-hardirqs](src/10-hardirqs/README.md) 使用 hardirqs 或 softirqs 捕获中断事件
|
||||
- [lesson 11-bootstrap](src/11-bootstrap/README.md) 使用 libbpf-boostrap 为 eBPF 编写原生的 libbpf 用户态代码,并建立完整的 libbpf 工程。
|
||||
- [lesson 12-profile](src/12-profile/README.md) 使用 eBPF 进行性能分析
|
||||
- [lesson 13-tcpconnlat](src/13-tcpconnlat/README.md) 记录 TCP 连接延迟,并使用 libbpf-boostrap 或 Webassembly (WASM)在用户态处理数据
|
||||
- [lesson 13-tcpconnlat](src/13-tcpconnlat/README.md) 记录 TCP 连接延迟,并使用 libbpf 在用户态处理数据
|
||||
- [lesson 14-tcpstates](src/14-tcpstates/README.md) 记录 TCP 连接状态
|
||||
- [lesson 15-tcprtt](src/15-tcprtt/README.md) 以直方图方式记录 TCP RTT,并使用 libbpf-boostrap 或 WASM 在用户态采样 map 信息
|
||||
- [lesson 15-tcprtt](src/15-tcprtt/README.md) 以直方图方式记录 TCP RTT,并使用 libbpf 在用户态采样 map 信息
|
||||
- [lesson 16-memleak](src/16-memleak/README.md) 检测内存泄漏
|
||||
- [lesson 17-biopattern](src/17-biopattern/README.md) 捕获磁盘 IO 模式
|
||||
- [lesson 18-further-reading](src/18-further-reading/README.md) 更进一步的相关资料?
|
||||
@@ -36,7 +40,20 @@
|
||||
- [lesson 20-tc](src/20-tc/README.md) 使用 eBPF 进行 tc 流量控制
|
||||
- [lesson 21-xdp](src/21-xdp/README.md) 使用 eBPF 进行 XDP 报文处理
|
||||
|
||||
在学习 eBPF 的过程中,我们受到了 [bcc python developer tutorial](src/bcc-documents/tutorial_bcc_python_developer.md) 的许多启发和帮助,但从 2022 年的角度出发,使用 libbpf 开发 eBPF 的应用是目前相对更好的选择。但目前似乎很少有基于 libbpf 和 BPF CO-RE 出发的、通过案例和工具介绍 eBPF 开发的教程,因此我们发起了这个项目,采用类似 bcc python developer tutorial 的组织方式,但使用 CO-RE 的 libbpf 进行开发。
|
||||
### 进阶文档与示例程序
|
||||
|
||||
这里涵盖了一系列和 eBPF 相关的高级内容,包含在 Android 上使用 eBPF 程序、使用 eBPF 程序进行可能的攻击与防御、复杂的追踪等等。将 eBPF 用户态与内核态的部分结合起来,可能能带来巨大的威力(同时也是安全隐患)。
|
||||
|
||||
- [在 Android 上使用 eBPF 程序](src/22-android/README.md)
|
||||
- [使用 eBPF 追踪 HTTP 请求或其他用户态协议](src/23-http/README.md)
|
||||
- [使用 eBPF 隐藏进程或文件信息](src/24-hide/README.md)
|
||||
- [使用 bpf_send_signal 发送信号终止进程](src/25-signal/README.md)
|
||||
- [使用 eBPF 添加 sudo 用户](src/26-sudo/README.md)
|
||||
- [使用 eBPF 替换任意程序读取或写入的文本](src/27-replace/README.md)
|
||||
|
||||
## 为什么要写这个教程?
|
||||
|
||||
在学习 eBPF 的过程中,我们受到了 [bcc python developer tutorial](src/bcc-documents/tutorial_bcc_python_developer.md) 的许多启发和帮助,但从当下的角度出发,使用 libbpf 开发 eBPF 的应用是目前相对更好的选择。但目前似乎很少有基于 libbpf 和 BPF CO-RE 出发的、通过案例和工具介绍 eBPF 开发的教程,因此我们发起了这个项目,采用类似 bcc python developer tutorial 的组织方式,但使用 CO-RE 的 libbpf 进行开发。
|
||||
|
||||
本项目主要基于 [libbpf-boostrap](https://github.com/libbpf/libbpf-bootstrap) 和 [eunomia-bpf](https://github.com/eunomia-bpf/eunomia-bpf) 两个框架完成,并使用 eunomia-bpf 帮助简化一部分 libbpf eBPF 用户态代码的编写,让开发者专注于内核态的 eBPF 代码的开发。
|
||||
|
||||
@@ -47,10 +64,10 @@
|
||||
|
||||
面对创建一个 eBPF 项目,您是否对如何开始搭建环境以及选择编程语言感到困惑?别担心,我们为您准备了一系列 GitHub 模板,以便您快速启动一个全新的eBPF项目。只需在GitHub上点击 `Use this template` 按钮,即可开始使用。
|
||||
|
||||
- <https://github.com/eunomia-bpf/libbpf-starter-template>:基于C语言和 libbpf 框架的eBPF项目模板
|
||||
- <https://github.com/eunomia-bpf/cilium-ebpf-starter-template>:基于C语言和cilium/ebpf框架的eBPF项目模板
|
||||
- <https://github.com/eunomia-bpf/libbpf-rs-starter-template>:基于Rust语言和libbpf-rs框架的eBPF项目模板
|
||||
- <https://github.com/eunomia-bpf/eunomia-template>:基于C语言和eunomia-bpf框架的eBPF项目模板
|
||||
- <https://github.com/eunomia-bpf/libbpf-starter-template>:基于 C 语言和 libbpf 框架的eBPF 项目模板
|
||||
- <https://github.com/eunomia-bpf/cilium-ebpf-starter-template>:基于 Go 语言和cilium/框架的的 eBPF 项目模板
|
||||
- <https://github.com/eunomia-bpf/libbpf-rs-starter-template>:基于 Rust 语言和libbpf-rs 框架的 eBPF 项目模板
|
||||
- <https://github.com/eunomia-bpf/eunomia-template>:基于 C 语言和 eunomia-bpf 框架的eBPF 项目模板
|
||||
|
||||
这些启动模板包含以下功能:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user