#ebpf #bytecode #linux #instructions #scripting-language

bpf-script

一个用于在运行时创建eBPF程序的脚本语言和编译器

14个版本

0.5.4 2022年11月5日
0.5.3 2022年11月3日
0.4.0 2022年11月2日
0.1.7 2022年10月31日

#770 in 编程语言


2 crates 中使用

MIT 许可协议

92KB
2K SLoC

bpf-script

Build Status crates.io mio Lines of Code

一个用于在运行时创建eBPF程序的脚本语言和编译器,无需使用bcc或llvm。

构建这个crate的目的是首先更深入地了解BPF内部,其次,提供一个无需依赖项的方式来编写BPF程序,使用高级语言,可以在运行时编译,无需将编译器壳出并从ELF文件加载/修补BPF。

该语言的语法类似于Rust,但去除了很多功能。例如,一个简单的调用辅助函数并返回值的u/k probe程序如下所示

fn(regs: &bpf_user_pt_regs_t)
    a = get_current_uid_gid()
    map_push_elem(queue, &a, 0)
    return a

此crate旨在与以下crate一起使用,但它们不是必需的

  • btf 一个BTF解析库。
  • bpf-script-derive 允许您在Rust和此编译器之间无缝共享类型。
  • bpf-api 创建程序、探测、映射等。

用法

有关使用示例,请参阅位于 examples/ 的代码

示例 描述
print-instructions 编译一个简短程序并打印生成的指令

待办事项

  • 添加控制流。
  • 编写更全面的测试。

许可协议

依赖关系

~4–15MB
~136K SLoC