GCC 现在包含用于编译到 eBPF 的后端

包含在 GCC 编译器套件中 通过 用于为 Linux 内核内置的字节码解释器编译程序的代码 eGMP。 由于使用了 JIT 编译,内核字节码可以即时翻译为机器指令,并以本机代码的性能执行。 支持 eBPF 的补丁 公认 到开发 GCC 10 版本的分支。

除了用于生成字节码的后端之外,GCC 还包括用于 eBPF 的 libgcc 端口和用于生成 ELF 文件的工具,这些工具使得可以使用内核提供的加载器在 eBPF 虚拟机中执行代码。 在 GCC 中支持 eBPF 的补丁是由 Oracle 的工程师准备的,他们已经 提供 GNU binutils 中的 eBPF 支持。 GDB 的模拟器和补丁也在开发中,这将允许您调试 eBPF 程序而无需将它们加载到内核中。

eBPF 程序可以用 C 语言的子集定义、编译并加载到内核中。 在执行之前,eBPF 解释器会检查字节码是否使用了允许的指令,并对代码施加某些规则(例如,无循环)。
最初,基于 LLVM 的工具用于在 Linux 上编译 eBPF。 GCC 中的 eBPF 支持很有趣,因为它允许您使用一个工具包来构建 Linux 内核和 eBPF 程序,而无需安装额外的依赖项。

以 eBPF 程序的形式,您可以创建网络操作处理程序、过滤流量、管理带宽、监控系统、拦截系统调用、控制访问、统计操作的频率和时间,以及使用 kprobes/uprobes/tracepoints 执行跟踪。

来源: opennet.ru

添加评论