mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-02-04 02:34:16 +08:00
Deploying to gh-pages from @ eunomia-bpf/bpf-developer-tutorial@fcad798022 🚀
This commit is contained in:
@@ -224,7 +224,7 @@ int handle_tp(void *ctx)
|
||||
<li><code>return 0</code>;:必须这样,返回0 (如果要知道why, 参考 #139 <a href="https://github.com/iovisor/bcc/issues/139">https://github.com/iovisor/bcc/issues/139</a>)。</li>
|
||||
</ul>
|
||||
<p>要编译和运行这段程序,可以使用 ecc 工具和 ecli 命令。首先使用 ecc 编译程序:</p>
|
||||
<pre><code class="language-console">$ ecc hello.bpf.c
|
||||
<pre><code class="language-console">$ ecc minimal.bpf.c
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
</code></pre>
|
||||
|
||||
@@ -277,7 +277,7 @@ int handle_exit(struct trace_event_raw_sched_process_template* ctx)
|
||||
<p>程序还定义了一个名为handle_exit的SEC函数,它被附加到跟踪进程退出的BPF程序上。该函数会在确定PID和TID后计算进程的生命周期,然后根据min_duration_ns的值决定是否发出退出事件。如果进程的生命周期足够长,则会从BPF ringbuf保留样本并使用数据填充样本,然后将其提交给用户空间进行后处理。</p>
|
||||
<p>最后,主函数调用bpf_ringbuf_poll来轮询BPF ringbuf,并在接收到新的事件时处理该事件。这个函数会持续运行,直到全局标志exiting被设置为true,此时它会清理资源并退出。</p>
|
||||
<p>编译运行上述代码:</p>
|
||||
<pre><code class="language-console">$ ecc bootstrap.bpf.c
|
||||
<pre><code class="language-console">$ ecc bootstrap.bpf.c bootstrap.h
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
$ sudo ecli run package.json
|
||||
|
||||
@@ -175,7 +175,7 @@ char LICENSE[] SEC("license") = "GPL";
|
||||
<p>上面的 eBPF 程序通过定义函数 tracepoint__syscalls__sys_enter_openat 并使用 SEC 宏把它们附加到 sys_enter_openat 的 tracepoint(即在进入 openat 系统调用时执行)。这个函数通过使用 bpf_get_current_pid_tgid 函数获取调用 openat 系统调用的进程 ID,并使用 bpf_printk 函数在内核日志中打印出来。</p>
|
||||
<p>eunomia-bpf 是一个结合 Wasm 的开源 eBPF 动态加载运行时和开发工具链,它的目的是简化 eBPF 程序的开发、构建、分发、运行。可以参考 <a href="https://github.com/eunomia-bpf/eunomia-bpf">https://github.com/eunomia-bpf/eunomia-bpf</a> 下载和安装 ecc 编译工具链和 ecli 运行时。我们使用 eunomia-bpf 编译运行这个例子。</p>
|
||||
<p>编译运行上述代码:</p>
|
||||
<pre><code class="language-console">$ ecc fentry-link.bpf.c
|
||||
<pre><code class="language-console">$ ecc opensnoop.bpf.c
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
$ sudo ecli run package.json
|
||||
|
||||
@@ -206,7 +206,7 @@ char LICENSE[] SEC("license") = "GPL";
|
||||
<p>这里的 printret 是探针函数的名称,const void *ret 是探针函数的参数,它代表被捕获的函数的返回值。</p>
|
||||
<p>eunomia-bpf 是一个结合 Wasm 的开源 eBPF 动态加载运行时和开发工具链,它的目的是简化 eBPF 程序的开发、构建、分发、运行。可以参考 <a href="https://github.com/eunomia-bpf/eunomia-bpf">https://github.com/eunomia-bpf/eunomia-bpf</a> 下载和安装 ecc 编译工具链和 ecli 运行时。我们使用 eunomia-bpf 编译运行这个例子。</p>
|
||||
<p>编译运行上述代码:</p>
|
||||
<pre><code class="language-console">$ ecc bashreadline.bpf.c bashreadline.h
|
||||
<pre><code class="language-console">$ ecc bashreadline.bpf.c
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
$ sudo ecli run package.json
|
||||
|
||||
@@ -232,7 +232,7 @@ char LICENSE[] SEC("license") = "Dual BSD/GPL";
|
||||
<pre><code class="language-shell">docker run -it -v `pwd`/:/src/ yunwei37/ebpm:latest
|
||||
</code></pre>
|
||||
<p>或者</p>
|
||||
<pre><code class="language-console">$ ecc sigsnoop.bpf.c sigsnoop.h
|
||||
<pre><code class="language-console">$ ecc sigsnoop.bpf.c
|
||||
Compiling bpf object...
|
||||
Generating export types...
|
||||
Packing ebpf object and config into package.json...
|
||||
|
||||
10
print.html
10
print.html
@@ -355,7 +355,7 @@ int handle_tp(void *ctx)
|
||||
<li><code>return 0</code>;:必须这样,返回0 (如果要知道why, 参考 #139 <a href="https://github.com/iovisor/bcc/issues/139">https://github.com/iovisor/bcc/issues/139</a>)。</li>
|
||||
</ul>
|
||||
<p>要编译和运行这段程序,可以使用 ecc 工具和 ecli 命令。首先使用 ecc 编译程序:</p>
|
||||
<pre><code class="language-console">$ ecc hello.bpf.c
|
||||
<pre><code class="language-console">$ ecc minimal.bpf.c
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
</code></pre>
|
||||
@@ -579,7 +579,7 @@ char LICENSE[] SEC("license") = "GPL";
|
||||
<p>上面的 eBPF 程序通过定义函数 tracepoint__syscalls__sys_enter_openat 并使用 SEC 宏把它们附加到 sys_enter_openat 的 tracepoint(即在进入 openat 系统调用时执行)。这个函数通过使用 bpf_get_current_pid_tgid 函数获取调用 openat 系统调用的进程 ID,并使用 bpf_printk 函数在内核日志中打印出来。</p>
|
||||
<p>eunomia-bpf 是一个结合 Wasm 的开源 eBPF 动态加载运行时和开发工具链,它的目的是简化 eBPF 程序的开发、构建、分发、运行。可以参考 <a href="https://github.com/eunomia-bpf/eunomia-bpf">https://github.com/eunomia-bpf/eunomia-bpf</a> 下载和安装 ecc 编译工具链和 ecli 运行时。我们使用 eunomia-bpf 编译运行这个例子。</p>
|
||||
<p>编译运行上述代码:</p>
|
||||
<pre><code class="language-console">$ ecc fentry-link.bpf.c
|
||||
<pre><code class="language-console">$ ecc opensnoop.bpf.c
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
$ sudo ecli run package.json
|
||||
@@ -683,7 +683,7 @@ char LICENSE[] SEC("license") = "GPL";
|
||||
<p>这里的 printret 是探针函数的名称,const void *ret 是探针函数的参数,它代表被捕获的函数的返回值。</p>
|
||||
<p>eunomia-bpf 是一个结合 Wasm 的开源 eBPF 动态加载运行时和开发工具链,它的目的是简化 eBPF 程序的开发、构建、分发、运行。可以参考 <a href="https://github.com/eunomia-bpf/eunomia-bpf">https://github.com/eunomia-bpf/eunomia-bpf</a> 下载和安装 ecc 编译工具链和 ecli 运行时。我们使用 eunomia-bpf 编译运行这个例子。</p>
|
||||
<p>编译运行上述代码:</p>
|
||||
<pre><code class="language-console">$ ecc bashreadline.bpf.c bashreadline.h
|
||||
<pre><code class="language-console">$ ecc bashreadline.bpf.c
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
$ sudo ecli run package.json
|
||||
@@ -787,7 +787,7 @@ char LICENSE[] SEC("license") = "Dual BSD/GPL";
|
||||
<pre><code class="language-shell">docker run -it -v `pwd`/:/src/ yunwei37/ebpm:latest
|
||||
</code></pre>
|
||||
<p>或者</p>
|
||||
<pre><code class="language-console">$ ecc sigsnoop.bpf.c sigsnoop.h
|
||||
<pre><code class="language-console">$ ecc sigsnoop.bpf.c
|
||||
Compiling bpf object...
|
||||
Generating export types...
|
||||
Packing ebpf object and config into package.json...
|
||||
@@ -1563,7 +1563,7 @@ int handle_exit(struct trace_event_raw_sched_process_template* ctx)
|
||||
<p>程序还定义了一个名为handle_exit的SEC函数,它被附加到跟踪进程退出的BPF程序上。该函数会在确定PID和TID后计算进程的生命周期,然后根据min_duration_ns的值决定是否发出退出事件。如果进程的生命周期足够长,则会从BPF ringbuf保留样本并使用数据填充样本,然后将其提交给用户空间进行后处理。</p>
|
||||
<p>最后,主函数调用bpf_ringbuf_poll来轮询BPF ringbuf,并在接收到新的事件时处理该事件。这个函数会持续运行,直到全局标志exiting被设置为true,此时它会清理资源并退出。</p>
|
||||
<p>编译运行上述代码:</p>
|
||||
<pre><code class="language-console">$ ecc bootstrap.bpf.c
|
||||
<pre><code class="language-console">$ ecc bootstrap.bpf.c bootstrap.h
|
||||
Compiling bpf object...
|
||||
Packing ebpf object and config into package.json...
|
||||
$ sudo ecli run package.json
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user