docs: update links and improve formatting in various README files

- Corrected URLs in the Chinese and English README files to ensure accuracy and consistency.
- Removed trailing punctuation from links for better formatting.
- Enhanced clarity in the descriptions and instructions across multiple documents.
This commit is contained in:
github-actions[bot]
2025-08-24 04:34:30 +00:00
parent 5a2535312c
commit 97196d0550
11 changed files with 38 additions and 38 deletions

View File

@@ -124,8 +124,8 @@ eBPF 能够动态调整系统行为并扩展到用户空间,使其成为现代
推荐:
- 阅读 eBPF 介绍:<https://ebpf.io/>30 分钟)
- 简要了解 eBPF 内核相关文档:<https://docs.ebpf.io/>了解技术细节的查询来源30 分钟)
- 阅读 eBPF 介绍:<https://ebpf.io/> 30 分钟)
- 简要了解 eBPF 内核相关文档:<https://docs.ebpf.io/> 了解技术细节的查询来源30 分钟)
回答三个问题:
@@ -137,10 +137,10 @@ eBPF 能够动态调整系统行为并扩展到用户空间,使其成为现代
了解并尝试 eBPF 开发框架:
- bpftrace 教程:<https://eunomia.dev/tutorials/bpftrace-tutorial/>尝试1 小时)
- 使用 BCC 开发各种工具的示例:<https://github.com/iovisor/bcc/blob/master/docs/tutorial_bcc_python_developer.md>运行3-4 小时)
- libbpf 的一些示例:<https://github.com/libbpf/libbpf-bootstrap>运行任何有趣的示例并阅读源代码2 小时)
- 教程:<https://github.com/eunomia-bpf/bpf-developer-tutorial>(阅读第 1-10 部分3-4 小时)
- bpftrace 教程:<https://eunomia.dev/tutorials/bpftrace-tutorial/> 尝试1 小时)
- 使用 BCC 开发各种工具的示例:<https://github.com/iovisor/bcc/blob/master/docs/tutorial_bcc_python_developer.md> 运行3-4 小时)
- libbpf 的一些示例:<https://github.com/libbpf/libbpf-bootstrap> 运行任何有趣的示例并阅读源代码2 小时)
- 教程:<https://github.com/eunomia-bpf/bpf-developer-tutorial> (阅读第 1-10 部分3-4 小时)
其他开发框架Go 或 Rust 语言请自行搜索和尝试0-2 小时)

View File

@@ -190,7 +190,7 @@ reference
- BPF token concept: <https://lore.kernel.org/bpf/20230629051832.897119-1-andrii@kernel.org/>
- BPF signing using fsverity and LSM gatekeeper: <https://www.youtube.com/watch?v=9p4qviq60z8>
- Sign the BPF bytecode: <https://lpc.events/event/16/contributions/1357/attachments/1045/1999/BPF%20Signatures.pdf>
- bpfd: <https://bpfd.dev/>
- bpfd: <https://bpfman.io/>
## Other possible solutions

View File

@@ -189,7 +189,7 @@ BPF命名空间在概念上与PID命名空间相似设计上直观易用。
- BPF令牌概念<https://lore.kernel.org/bpf/20230629051832.897119-1-andrii@kernel.org/>
- 使用fsverity和LSM守门员进行BPF签名<https://www.youtube.com/watch?v=9p4qviq60z8>
- 签名BPF字节码<https://lpc.events/event/16/contributions/1357/attachments/1045/1999/BPF%20Signatures.pdf>
- bpfd<https://bpfd.dev/>
- bpfd<https://bpfman.io/>
## 一些其他的解决方案
@@ -248,4 +248,4 @@ Wasm-bpf是一种WebAssembly eBPF库、工具链和运行时能够使eBPF程
> 我们是 [github.com/eunomia-bpf](https://github.com/eunomia-bpf) 开源社区希望能使eBPF更易使用并探索与 eBPF 相关的工具链和运行时等技术。
>
> 对eBPF技术感兴趣的朋友欢迎查看我们的教程代码仓库 <https://github.com/eunomia-bpf/bpf-developer-tutorial> 和我们的网站 <https://eunomia.dev/tutorials/>以获取更多关于 eBPF 的相关资料和实践经验。原文地址:<https://eunomia.dev/zh/blogs/ebpf-security>
> 对eBPF技术感兴趣的朋友欢迎查看我们的教程代码仓库 <https://github.com/eunomia-bpf/bpf-developer-tutorial> 和我们的网站 <https://eunomia.dev/tutorials/> 以获取更多关于 eBPF 的相关资料和实践经验。原文地址:<https://eunomia.dev/zh/blogs/ebpf-security>

View File

@@ -145,6 +145,6 @@ If you want to learn more about eBPF knowledge and practice, you can visit our t
+ [Google android docs](https://source.android.google.cn/docs/core/architecture/kernel/bpf)
+ [weixin WeiShu](https://mp.weixin.qq.com/s/mul4n5D3nXThjxuHV7GpMA)
+ [SeeFlowerX](https://blog.seeflower.dev/archives/138/>)
+ [SeeFlowerX](https://blog.seeflower.dev/archives/138/)
> The original link of this article: <https://eunomia.dev/tutorials/22-android>

View File

@@ -4,7 +4,7 @@
但现在,我们有了新的解决方案。使用 eBPF 技术,通过其能力在用户空间进行探测,提供了一种方法重新获得明文数据,使得我们可以直观地查看加密前的通信内容。然而,每个应用可能使用不同的库,每个库都有多个版本,这种多样性给跟踪带来了复杂性。
在本教程中,我们将带您了解一种跨多种用户态 SSL/TLS 库的 eBPF 追踪技术,它不仅可以同时跟踪 GnuTLS 和 OpenSSL 等用户态库,而且相比以往,大大降低了对新版本库的维护工作。完整的源代码可以在这里查看:<https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/30-sslsniff>
在本教程中,我们将带您了解一种跨多种用户态 SSL/TLS 库的 eBPF 追踪技术,它不仅可以同时跟踪 GnuTLS 和 OpenSSL 等用户态库,而且相比以往,大大降低了对新版本库的维护工作。完整的源代码可以在这里查看:<https://github.com/eunomia-bpf/bpf-developer-tutorial/tree/main/src/30-sslsniff>
## 背景知识

View File

@@ -48,7 +48,7 @@ $ nm helloworld/target/release/helloworld | grep hello
We find that the corresponding symbol has been converted to `_ZN10helloworld4main17h2dce92cb81426b91E`. This is because rustc uses [Symbol name mangling](https://en.wikipedia.org/wiki/Name_mangling) to encode a unique name for the symbols used in the code generation process. The encoded name will be used by the linker to associate the name with the content it points to. The -C symbol-mangling-version option can be used to control the handling of symbol names.
We can use the [`rustfilt`](https://crates.io/crates/rustfilt) tool to parse and obtain the corresponding symbol:
We can use the [`rustfilt`](https://github.com/luser/rustfilt) tool to parse and obtain the corresponding symbol. This tool can be installed with `cargo install rustfilt`:
```console
$ cargo install rustfilt

View File

@@ -48,7 +48,7 @@ $ nm helloworld/target/release/helloworld | grep hello
我们会发现,对应的符号被转换为了 `_ZN10helloworld4main17h2dce92cb81426b91E`,这是因为 rustc 使用 [Symbol name mangling](https://en.wikipedia.org/wiki/Name_mangling) 来为代码生成过程中使用的符号编码一个唯一的名称。编码后的名称会被链接器用于将名称与所指向的内容关联起来。可以使用 -C symbol-mangling-version 选项来控制符号名称的处理方法。
我们可以使用 [`rustfilt`](https://crates.io/crates/rustfilt) 工具来解析和获取对应的符号:
我们可以使用 [`rustfilt`](https://github.com/luser/rustfilt) 工具来解析和获取对应的符号。这个工具可以通过 `cargo install rustfilt` 安装
```console
$ cargo install rustfilt

View File

@@ -277,29 +277,29 @@ $ sudo cat /sys/kernel/debug/tracing/trace_pipe
我们的 eBPF 追踪程序也几乎不需要进行任何修改,只需要把包含 kernel 和用户态结构体偏移量的 BTF 加载进来即可。这和旧版本内核上没有 btf 信息的使用方式是一样的:
```c
LIBBPF_OPTS(bpf_object_open_opts , opts,
);
LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts);
if (argc != 3 && argc != 2) {
fprintf(stderr, "Usage: %s <example-name> [<external-btf>]\n", argv[0]);
return 1;
}
if (argc == 3)
opts.btf_custom_path = argv[2];
LIBBPF_OPTS(bpf_object_open_opts , opts,
);
LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts);
if (argc != 3 && argc != 2) {
fprintf(stderr, "Usage: %s <example-name> [<external-btf>]\n", argv[0]);
return 1;
}
if (argc == 3)
opts.btf_custom_path = argv[2];
/* Set up libbpf errors and debug info callback */
libbpf_set_print(libbpf_print_fn);
/* Set up libbpf errors and debug info callback */
libbpf_set_print(libbpf_print_fn);
/* Cleaner handling of Ctrl-C */
signal(SIGINT, sig_handler);
signal(SIGTERM, sig_handler);
/* Cleaner handling of Ctrl-C */
signal(SIGINT, sig_handler);
signal(SIGTERM, sig_handler);
/* Load and verify BPF application */
skel = uprobe_bpf__open_opts(&opts);
if (!skel) {
fprintf(stderr, "Failed to open and load BPF skeleton\n");
return 1;
}
/* Load and verify BPF application */
skel = uprobe_bpf__open_opts(&opts);
if (!skel) {
fprintf(stderr, "Failed to open and load BPF skeleton\n");
return 1;
}
```
实际上btf 实现重定向需要两个部分,一个是 bpf 程序带的编译时的 btf 信息,一个是内核的 btf 信息。在实际加载 ebpf 程序的时候libbpf 会根据当前内核上准确的 btf 信息,来修改可能存在错误的 ebpf 指令,确保在不同内核版本上能够兼容。
@@ -312,8 +312,8 @@ $ sudo cat /sys/kernel/debug/tracing/trace_pipe
- **灵活性和兼容性**在用户空间eBPF程序中使用 BTF 大大增强了它们在不同版本的用户空间应用程序和库之间的灵活性和兼容性。
- **简化了复杂性**这种方法显著减少了维护不同版本的用户空间应用程序的eBPF程序的复杂性因为它消除了需要多个程序版本的需要。
- **更广泛的应用**这种方法在性能监控、安全和用户空间应用程序的调试等方面也可能能有更广泛的应用。bpftimehttps://github.com/eunomia-bpf/bpftime 是一个开源的基于 LLVM JIT/AOT 的用户态 eBPF 运行时,它可以在用户态运行 eBPF 程序,和内核态的 eBPF 兼容。它在支持 uprobe、syscall trace 和一般的插件扩展的同时,避免了内核态和用户态之间的上下文切换,从而提高了 uprobe 程序的执行效率。借助 libbpf 和 btf 的支持bpftime 也可以更加动态的扩展用户态应用程序,实现在不同用户态程序版本之间的兼容性。
- **更广泛的应用**这种方法在性能监控、安全和用户空间应用程序的调试等方面也可能能有更广泛的应用。bpftime<https://github.com/eunomia-bpf/bpftime> 是一个开源的基于 LLVM JIT/AOT 的用户态 eBPF 运行时,它可以在用户态运行 eBPF 程序,和内核态的 eBPF 兼容。它在支持 uprobe、syscall trace 和一般的插件扩展的同时,避免了内核态和用户态之间的上下文切换,从而提高了 uprobe 程序的执行效率。借助 libbpf 和 btf 的支持bpftime 也可以更加动态的扩展用户态应用程序,实现在不同用户态程序版本之间的兼容性。
这个示例展示了 eBPF 在实践中可以将其强大的 CO-RE 功能扩展到更动态地处理用户空间应用的不同版本变化。
如果你想了解更多关于eBPF知识和实践你可以访问我们的教程代码库<https://github.com/eunomia-bpf/bpf-developer-tutorial>或者网站<https://eunomia.dev/tutorials/>获得更多示例和完整教程。
如果你想了解更多关于eBPF知识和实践你可以访问我们的教程代码库 <https://github.com/eunomia-bpf/bpf-developer-tutorial> 或者网站 <https://eunomia.dev/tutorials/> 获得更多示例和完整教程。

View File

@@ -504,6 +504,6 @@ Captured TCP Header:
这种方法为传统的数据包捕获方法提供了一种高性能的替代方案,对系统资源的影响最小。它是网络监控、安全分析和调试的强大技术。
如果您想了解更多关于 eBPF 的内容,请访问我们的教程代码仓库 <https://github.com/eunomia-bpf/bpf-developer-tutorial> 或我们的网站 <https://eunomia.dev/tutorials/>
如果您想了解更多关于 eBPF 的内容,请访问我们的教程代码仓库 <https://github.com/eunomia-bpf/bpf-developer-tutorial> 或我们的网站 <https://eunomia.dev/tutorials/>
编程愉快!

View File

@@ -10,7 +10,7 @@
### 0. 使用bcc之前
在使用bcc之前你应该从Linux基础知识开始。可以参考[Linux Performance Analysis in 60,000 Milliseconds](https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55)文章,其中介绍了以下命令:
在使用bcc之前你应该从Linux基础知识开始。可以参考[Linux Performance Analysis in 60,000 Milliseconds](https://www.brendangregg.com/Articles/Netflix_Linux_Perf_Analysis_60s.pdf)文章,其中介绍了以下命令:
1. uptime
1. dmesg | tail

View File

@@ -10,7 +10,7 @@ Some quick wins.
### 0. Before bcc
Before using bcc, you should start with the Linux basics. One reference is the [Linux Performance Analysis in 60,000 Milliseconds](https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55) post, which covers these commands:
Before using bcc, you should start with the Linux basics. One reference is the [Linux Performance Analysis in 60,000 Milliseconds](https://www.brendangregg.com/Articles/Netflix_Linux_Perf_Analysis_60s.pdf) post, which covers these commands:
1. uptime
1. dmesg | tail