#ebpf #jit #filtering #interpreter #virtual-machine #jit-compiler

bvm_filter

适用于eBPF程序的虚拟机和JIT编译器

2个版本 (1个稳定版)

使用旧的Rust 2015

1.0.0 2019年6月24日
0.0.0 2019年6月24日

#39 in #jit-compiler

Apache-2.0/MITGPL-2.0 许可证

315KB
5K SLoC

包含 (ELF库, 10KB) tests/elfs/multiple_file.so,(ELF可执行/库, 1KB) examples/load_elf__block_a_port.o,(ELF库, 10KB) tests/elfs/empty_rodata.so,(ELF库, 10KB) tests/elfs/noop.so,(ELF库, 2KB) tests/elfs/noro.so,(ELF库, 10KB) tests/elfs/pass_stack_reference.so 以及3个更多。

bvm_filter

Bitconch虚拟机,使用Rust编写的eBPF解释器(用户空间)。

BVM虚拟机

描述

此软件包包含用于执行eBPF程序的虚拟机。 与_Berkeley Packet Filter_中一样,BPF是一种最初为BSD系统开发的类似汇编的语言,用于使用tcpdump等工具过滤内核中的数据包,以避免无用的副本到用户空间。 它后来移植到Linux,在那里它演变成eBPF(扩展BPF)。 eBPF运行速度更快,功能更强大。 虽然BPF程序最初打算在内核中运行,但此crate的虚拟机允许在用户空间应用程序中运行它;它包含一个解释器,一个用于eBPF程序的x86_64 JIT编译器,以及一个反汇编程序。

该软件基于Rich Lane的[uBPF软件](https://github.com/iovisor/ubpf/),的功能基本相同,但用C语言编写。

该软件包应在Linux,MacOS X上编译和运行,并将支持Windows。

此包可以从[crates.io](https://crates.io/crates/bvm_filter)获得,所以它应该开箱即用,只需将它作为依赖项添加到你的Cargo.toml文件中。

[dependencies]
bvm_filter = "1.0.0"

您还可以使用此GitHub存储库中的开发版本。 这应该就像把它放在你的Cargo.toml中一样简单。

[dependencies]
bvm_filter = { git = "https://github.com/bitconch/bvm_filter" }

当然,如果您愿意,可以在本地克隆它,可能会破坏板条箱,然后在Cargo.toml中指出本地版本的路径。

[dependencies]
bvm_filter = { path = "path/to/bvm_filter" }

然后在源代码中指出您要使用包:

extern crate bvm_filter;

依赖关系

~18–29MB
~339K SLoC