From 6f7ee7cf51650c23b22ec61a0d881347954836be Mon Sep 17 00:00:00 2001 From: saivian1 <1446174581@qq.com> Date: Fri, 9 Dec 2022 17:02:22 +0800 Subject: [PATCH 1/5] Update README.md --- 8-exitsnoop/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/8-exitsnoop/README.md b/8-exitsnoop/README.md index c2e8976..100884f 100644 --- a/8-exitsnoop/README.md +++ b/8-exitsnoop/README.md @@ -1,4 +1,4 @@ -## eBPF 入门实践教程: +## eBPF 入门开发实践指南八:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用: ## origin From 18832d382c0a8047bf72858b242271ae64fef618 Mon Sep 17 00:00:00 2001 From: saivian1 <1446174581@qq.com> Date: Fri, 9 Dec 2022 17:17:19 +0800 Subject: [PATCH 2/5] Update README.md eee --- 8-exitsnoop/README.md | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/8-exitsnoop/README.md b/8-exitsnoop/README.md index 100884f..c2def30 100644 --- a/8-exitsnoop/README.md +++ b/8-exitsnoop/README.md @@ -1,5 +1,63 @@ ## eBPF 入门开发实践指南八:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用: + + + +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* Copyright (c) 2020 Facebook */ +#include "vmlinux.h" +#include +#include +#include +#include "exitsnoop.h" + +char LICENSE[] SEC("license") = "Dual BSD/GPL"; + +struct { + __uint(type, BPF_MAP_TYPE_RINGBUF); + __uint(max_entries, 256 * 1024); +} rb SEC(".maps"); + +SEC("tp/sched/sched_process_exit") +int handle_exit(struct trace_event_raw_sched_process_template* ctx) +{ + struct task_struct *task; + struct event *e; + pid_t pid, tid; + u64 id, ts, *start_ts, duration_ns = 0; + + /* get PID and TID of exiting thread/process */ + id = bpf_get_current_pid_tgid(); + pid = id >> 32; + tid = (u32)id; + + /* ignore thread exits */ + if (pid != tid) + return 0; + + /* reserve sample from BPF ringbuf */ + e = bpf_ringbuf_reserve(&rb, sizeof(*e), 0); + if (!e) + return 0; + + /* fill out the sample with data */ + task = (struct task_struct *)bpf_get_current_task(); + + e->duration_ns = duration_ns; + e->pid = pid; + e->ppid = BPF_CORE_READ(task, real_parent, tgid); + e->exit_code = (BPF_CORE_READ(task, exit_code) >> 8) & 0xff; + bpf_get_current_comm(&e->comm, sizeof(e->comm)); + + /* send data to user-space for post-processing */ + bpf_ringbuf_submit(e, 0); + return 0; +} + +这段代码是一个 BPF 程序,用于监控 Linux 系统中的进程退出事件。它通过注册一个 tracepoint(“tp/sched/sched_process_exit”)来捕获进程退出事件,并使用 BPF 环形缓冲区来存储捕获的事件数据。 +当系统中发生进程退出事件时,BPF 程序会捕获该事件,并调用“handle_exit”函数来处理它。该函数会检查 + + ## origin origin from: From 06be3de668df03eff61f872ca93c7f5416ca5cca Mon Sep 17 00:00:00 2001 From: saivian1 <1446174581@qq.com> Date: Fri, 9 Dec 2022 17:20:59 +0800 Subject: [PATCH 3/5] Update README.md --- 8-exitsnoop/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/8-exitsnoop/README.md b/8-exitsnoop/README.md index c2def30..8adcb31 100644 --- a/8-exitsnoop/README.md +++ b/8-exitsnoop/README.md @@ -1,8 +1,5 @@ ## eBPF 入门开发实践指南八:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用: - - - // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* Copyright (c) 2020 Facebook */ #include "vmlinux.h" From b7e456b7336eaaf19b7701f9ed83851559f329e2 Mon Sep 17 00:00:00 2001 From: saivian1 <1446174581@qq.com> Date: Fri, 9 Dec 2022 17:38:07 +0800 Subject: [PATCH 4/5] Update README.md --- 8-exitsnoop/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/8-exitsnoop/README.md b/8-exitsnoop/README.md index 8adcb31..e6118ea 100644 --- a/8-exitsnoop/README.md +++ b/8-exitsnoop/README.md @@ -1,5 +1,9 @@ ## eBPF 入门开发实践指南八:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用: +<<<<<<< Updated upstream +======= + +>>>>>>> Stashed changes // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* Copyright (c) 2020 Facebook */ #include "vmlinux.h" @@ -51,8 +55,15 @@ int handle_exit(struct trace_event_raw_sched_process_template* ctx) return 0; } +<<<<<<< Updated upstream 这段代码是一个 BPF 程序,用于监控 Linux 系统中的进程退出事件。它通过注册一个 tracepoint(“tp/sched/sched_process_exit”)来捕获进程退出事件,并使用 BPF 环形缓冲区来存储捕获的事件数据。 当系统中发生进程退出事件时,BPF 程序会捕获该事件,并调用“handle_exit”函数来处理它。该函数会检查 +======= +这段代码是一个 BPF 程序,用于监控 Linux 系统中的进程退出事件。BPF(Berkeley Packet Filter)是一种内核态程序设计语言,允许开发人员编写内核模块以捕获和处理内核事件。 +该程序通过注册一个 tracepoint,来监控进程退出事件。Tracepoint 是一种内核特性,允许内核模块获取特定事件的通知。在本程序中,注册的 tracepoint 是“tp/sched/sched_process_exit”,表示该程序监控的是进程退出事件。 +当系统中发生进程退出事件时,BPF 程序会捕获该事件,并调用“handle_exit”函数来处理它。该函数首先检查当前退出事件是否是进程退出事件(而不是线程退出事件),然后在 BPF 环形缓冲区(“rb”)中保留一个事件结构体,并填充该结构体中的其他信息,例如进程 ID、进程名称、退出代码和退出信号等信息。最后,该函数还会调用 BPF 的“perf_event_output”函数,将捕获的事件发送给用户空间程序。 +总而言之,这段代码是一个 BPF 程序,用于监控 Linux 系统中的进程退出事件 +>>>>>>> Stashed changes ## origin From 7d7fc0c6bfbaf4760a6a0ccad16d2fffd3a36dee Mon Sep 17 00:00:00 2001 From: saivian1 <1446174581@qq.com> Date: Fri, 9 Dec 2022 17:45:02 +0800 Subject: [PATCH 5/5] Update README.md --- 8-exitsnoop/README.md | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/8-exitsnoop/README.md b/8-exitsnoop/README.md index e6118ea..130d184 100644 --- a/8-exitsnoop/README.md +++ b/8-exitsnoop/README.md @@ -1,11 +1,5 @@ -## eBPF 入门开发实践指南八:在 eBPF 中使用 fentry 监测捕获 unlink 系统调用: - -<<<<<<< Updated upstream -======= - ->>>>>>> Stashed changes -// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause -/* Copyright (c) 2020 Facebook */ +## eBPF 入门开发实践指南八:在 eBPF 中使用 exitsnoop 监控 进程退出事件: +##exitsnoop #include "vmlinux.h" #include #include @@ -55,9 +49,6 @@ int handle_exit(struct trace_event_raw_sched_process_template* ctx) return 0; } -<<<<<<< Updated upstream -这段代码是一个 BPF 程序,用于监控 Linux 系统中的进程退出事件。它通过注册一个 tracepoint(“tp/sched/sched_process_exit”)来捕获进程退出事件,并使用 BPF 环形缓冲区来存储捕获的事件数据。 -当系统中发生进程退出事件时,BPF 程序会捕获该事件,并调用“handle_exit”函数来处理它。该函数会检查 ======= 这段代码是一个 BPF 程序,用于监控 Linux 系统中的进程退出事件。BPF(Berkeley Packet Filter)是一种内核态程序设计语言,允许开发人员编写内核模块以捕获和处理内核事件。 该程序通过注册一个 tracepoint,来监控进程退出事件。Tracepoint 是一种内核特性,允许内核模块获取特定事件的通知。在本程序中,注册的 tracepoint 是“tp/sched/sched_process_exit”,表示该程序监控的是进程退出事件。