1 个不稳定版本
0.1.0 | 2024 年 2 月 28 日 |
---|
在 Unix APIs 中排名第 781
每月下载量 3,390
在 13 个 包中使用(直接使用 2 个)
595KB
16K SLoC
aya-obj
状态
该包包含最初用于 aya 包的内部 API 代码。它已被分割出来,以便其他处理 eBPF 对象文件的项目可以使用。除非您正在编写低级 eBPF 管道工具,否则您不需要使用此包,而是应使用 aya 包。
当前的 API 仍然有几个粗糙的边缘,并且通常不如主 aya 包 API 那么精致或稳定。一如既往,欢迎改进!
概述
使用 libbpf 或 aya-bpf 编写的 eBPF 程序通常被编译成 ELF 对象文件,使用各种部分来存储有关 eBPF 程序的信息。
aya-obj
是一个用于解析此类 eBPF 对象文件的库,具有 BTF 和重定位支持。
示例
此示例加载一个简单的 eBPF 程序,并使用 rbpf 运行它。
use aya_obj::{generated::bpf_insn, Object};
// Parse the object file
let bytes = std::fs::read("program.o").unwrap();
let mut object = Object::parse(&bytes).unwrap();
// Relocate the programs
object.relocate_calls().unwrap();
object.relocate_maps(std::iter::empty()).unwrap();
// Run with rbpf
let instructions = &object.programs["prog_name"].function.instructions;
let data = unsafe {
core::slice::from_raw_parts(
instructions.as_ptr() as *const u8,
instructions.len() * core::mem::size_of::<bpf_insn>(),
)
};
let vm = rbpf::EbpfVmNoData::new(Some(data)).unwrap();
let _return = vm.execute_program().unwrap();
依赖关系
~4.5MB
~82K SLoC