From 3d705cb33929c0b3789559a193b84270dd5d9c3f Mon Sep 17 00:00:00 2001 From: yunwei37 <1067852565@qq.com> Date: Mon, 23 Jan 2023 20:10:20 +0800 Subject: [PATCH] add summary --- 6-sigsnoop/README.md | 13 +++++++++++++ 7-execsnoop/README.md | 14 +++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/6-sigsnoop/README.md b/6-sigsnoop/README.md index bbf8deb..06c0e7b 100755 --- a/6-sigsnoop/README.md +++ b/6-sigsnoop/README.md @@ -123,6 +123,19 @@ $ sudo cat /sys/kernel/debug/tracing/trace_pipe ## 总结 +本文主要介绍如何实现一个 eBPF 工具,捕获进程发送信号的系统调用集合,使用 hash map 保存状态。使用 hash map 需要定义一个结构体: + +```c +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __uint(max_entries, MAX_ENTRIES); + __type(key, __u32); + __type(value, struct event); +} values SEC(".maps"); +``` + +并使用一些对应的 API 进行访问,例如 bpf_map_lookup_elem、bpf_map_update_elem、bpf_map_delete_elem 等。 + 更多的例子和详细的开发指南,请参考 eunomia-bpf 的官方文档: 完整的教程和源代码已经全部开源,可以在 中查看。 diff --git a/7-execsnoop/README.md b/7-execsnoop/README.md index 24faa82..da1c826 100644 --- a/7-execsnoop/README.md +++ b/7-execsnoop/README.md @@ -2,7 +2,7 @@ eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具,它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。 -本文是 eBPF 入门开发实践指南的第七篇,主要介绍如何捕获 Linux 内核中进程执行的事件,并且通过 perf event array 向用户态命令行打印输出,不需要再通过查看 /sys/kernel/debug/tracing/trace_pipe 文件来查看 eBPF 程序的输出。 +本文是 eBPF 入门开发实践指南的第七篇,主要介绍如何捕获 Linux 内核中进程执行的事件,并且通过 perf event array 向用户态命令行打印输出,不需要再通过查看 /sys/kernel/debug/tracing/trace_pipe 文件来查看 eBPF 程序的输出。通过 perf event array 向用户态发送信息之后,可以进行复杂的数据处理和分析。 ## execsnoop @@ -104,6 +104,18 @@ TIME PID PPID UID COMM ## 总结 +本文介绍了如何捕获 Linux 内核中进程执行的事件,并且通过 perf event array 向用户态命令行打印输出,通过 perf event array 向用户态发送信息之后,可以进行复杂的数据处理和分析。在 libbpf 对应的内核态代码中,定义这样一个结构体和对应的头文件: + +```c +struct { + __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); + __uint(key_size, sizeof(u32)); + __uint(value_size, sizeof(u32)); +} events SEC(".maps"); +``` + +就可以往用户态直接发送信息。 + 更多的例子和详细的开发指南,请参考 eunomia-bpf 的官方文档: 完整的教程和源代码已经全部开源,可以在 中查看。