mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-10-29 03:34:44 +08:00
docs: refine README files for clarity and conciseness across multiple tutorials
This commit is contained in:
@@ -16,7 +16,9 @@ Uprobe 在内核态 eBPF 运行时,也可能产生比较大的性能开销,
|
||||
|
||||
## 使用 uprobe 捕获 bash 的 readline 函数调用
|
||||
|
||||
uprobe 是一种用于捕获用户空间函数调用的 eBPF 的探针,我们可以通过它来捕获用户空间程序调用的系统函数。
|
||||
uprobe 特别适合在以下场景使用:你需要跟踪特定应用程序的行为,但无法修改源代码或重新编译程序;你想要调试复杂的用户空间问题,比如追踪库函数调用;或者你需要进行安全审计,监控敏感函数的调用。
|
||||
|
||||
为什么不能直接使用 kprobe?因为像 readline 这样的函数是在用户空间库中实现的,不是内核函数。uprobe 让我们能够在不修改程序的情况下,动态地插入探测点到任何用户空间二进制文件中。
|
||||
|
||||
例如,我们可以使用 uprobe 来捕获 bash 的 readline 函数调用,从而获取用户在 bash 中输入的命令行。示例代码如下:
|
||||
|
||||
@@ -107,7 +109,10 @@ BPF_KRETPROBE(printret, const void *ret)
|
||||
bpf_printk("PID %d (%s) read: %s ", pid, comm, str);
|
||||
```
|
||||
|
||||
eunomia-bpf 是一个结合 Wasm 的开源 eBPF 动态加载运行时和开发工具链,它的目的是简化 eBPF 程序的开发、构建、分发、运行。可以参考 <https://github.com/eunomia-bpf/eunomia-bpf> 下载和安装 ecc 编译工具链和 ecli 运行时。我们使用 eunomia-bpf 编译运行这个例子。
|
||||
|
||||
关键的部分是 `bpf_probe_read_user_str` 我们需要使用这个特殊的辅助函数来安全地从用户空间内存读取字符串,不能直接解引用 `ret` 指针,因为 eBPF 程序运行在内核空间,直接访问用户空间内存会导致错误。这个函数确保了安全的跨空间内存访问。
|
||||
|
||||
我们使用 eunomia-bpf 来编译和运行这个示例。你可以从 <https://github.com/eunomia-bpf/eunomia-bpf> 安装它。
|
||||
|
||||
编译运行上述代码:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user