eBPF for Windows 针对 Windows 的 eBPF 实现

2023年 12月 26日 87.9k 0

此项目允许在 Windows 上使用 Linux 生态中熟悉的现有 eBPF 工具链和应用接口。也就是说,该项目将现有的 eBPF 项目作为子模块,并添加中间层,使其能在 Windows 上运行。

下图显示了本项目的基本架构和相关组件:

现有的 eBPF 工具链(clang 等)可用于从各种语言的源代码生成 eBPF 字节码。字节码可以被任何应用程序使用,也可以通过 bpftool 或 Netsh 命令行工具使用。

eBPF 字节码会被发送到一个静态验证器(PREVAIL 验证器),该验证器托管在一个安全的用户模式环境中,如系统服务、飞地或可信虚拟机。如果 eBPF 程序通过了验证器的所有检查,就可以加载到内核模式执行上下文中。通常情况下,这是通过 JIT 编译器(通过 uBPF JIT 编译器)将程序编译成本地代码并传递给执行上下文来实现的。在调试构建中,字节码可直接加载到解释器(从内核模式执行上下文中的 uBPF),但解释器不会仅在调试模式中支持,不提供发布构建频道支持,因为它被认为安全性较低。

安装到内核模式执行上下文中的 eBPF 程序可以附加到各种钩子上,并调用 eBPF shim 公开的各种辅助 API,eBPF shim 内部封装了公共 Windows 内核 API,允许在现有版本的 Windows 上使用 eBPF。许多辅助程序已经存在,随着时间的推移,还将添加更多钩子和辅助程序。

此项目并不是 eBPF 的分支,eBPF for Windows 利用现有项目,包括 IOVisor uBPF 项目和 PREVAIL 校验器,通过为代码添加 Windows 特定的托管环境,将它们运行在 Windows 上。

Linux 提供了许多钩子和辅助工具,其中有些是 Linux 特有的(例如,使用 Linux 内部数据结构),不适用于其它平台,而其它钩子和辅助工具则是通用的,目的是为 eBPF 程序提供支持。

eBPF 还可以与 HyperVisor-enforced Code Integrity(HyperVisor 强制代码完整性,HVCI)一起使用。启用 HVCI 后,eBPF 程序无法进行 JIT 编译,但可以以本地模式或解释模式运行。

相关文章

塑造我成为 CTO 之路的“秘诀”
“人工智能教母”的公司估值达 10 亿美金
教授吐槽:985 高校成高级蓝翔!研究生基本废了,只为房子、票子……
Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好
Claude 3.5 Sonnet 在伽利略幻觉指数中名列前茅
上海新增 11 款已完成登记生成式 AI 服务

发布评论