在Windows上制作EBPF工作

2021-05-11 12:29:00

EBPF是一种众所周知但革命性的技术提供可编程性,可扩展性和敏捷性。 EBPF已应用于使用拒绝服务和可观察性等案例。随着时间的推移,在EBPF周围建立了一个重要的工具,产品和经验生态系统。尽管在Linux内核中首次对EBPF的支持首次实现,但允许eBPF在其他操作系统上使用甚至延长用户模式服务和守护进程,仍然越来越感兴趣。

今天我们很高兴宣布一个新的Microsoft开源项目,使EBPF在Windows 10和Windows Server 2016上工作。 eBPF-for-Windows项目旨在允许开发人员在现有版本的Windows之上使用熟悉的EBPF Toolchains和Application编程接口(API)。在其他人的工作中,这个项目采用了几个现有的EBPF开源项目,并添加了“胶水”以使它们在Windows上运行。

我们现在正在宣布这一点,而项目仍然在开发中仍然相对较早,因为我们的目标是与强大的EBPF社区合作,以确保EBPF在Windows上工作,而其他地方。

如图所示,现有的EBPF工具链如Clang可用于从各种语言的源代码生成EBPF字节码。然后,可以通过任何应用程序或通过Windows NetSh命令行工具手动使用生成的字节码,其中两者都使用公开italy的共享库,虽然此工作仍在进行。

该库将EBPF字节码发送到静态验证器(以前的验证程序),该验证者(以前的verifier)托管在用户模式受保护的过程中,它是一个Windows安全环境,允许内核组件信任由它键签名的用户模式守护程序信任。如果字节码通过所有验证者的安全检查,则字段码可以加载到Windows内核模式执行上下文中运行的UBPF解释器中,或者由UBPF立即(JIT)编译器编译,并将本机代码加载到其中内核模式执行上下文。

安装到内核模式执行上下文中的EBPF程序可以附加到各种挂钩以处理事件,并调用EBPF SHIM公开的各种辅助API,该eBPF垫片内部包裹公共Windows内核API,允许在现有版本的Windows上使用EBPF。到目前为止,已经添加了两个钩子(XDP和套接字绑定),虽然这些是特定于网络特定的钩子,但我们期望更多的钩子和助手,而不仅仅是网络相关的钩子,将随着时间的推移而增加。

Windows项目的EBPF利用现有的开源项目,包括IOVISOR UBPF项目和PREVAIL验证者,通过为该代码添加特定于Windows的托管环境,在Windows之上运行它们。

意图是为使用跨操作系统生态系统应用的常用钩子和帮助程序提供源代码兼容性。

Linux提供了许多钩子和帮助器,其中一些钩子和助手非常适用于Linux(例如,使用Linux内部数据结构)不适用于其他平台。其他钩子和助手是在几乎适用的,而目的是支持它们的EBPF程序。

同样,Windows项目的EBPF公开了Libbpf API为与EBPF程序交互的应用程序提供源代码兼容性。

EBPF for-Windows项目将EBPF的电源带到Windows用户,最终驻留在EBPF生态系统中的社区管理的基础中。通过您的输入和帮助,我们可以到达那里。

联系我们或在GitHub上创建一个问题。我们很高兴继续改进并扩展EBPF-For-Windows,以便每个人都可以从这个项目中受益。我们渴望看到你发现这个项目的发现以及它如何发展。