#object-file #ebpf #object #btf #elf #low-level

no-std aya-obj

带有 BTF 和重定位支持的 eBPF 对象文件解析库

1 个不稳定版本

0.1.0 2024 年 2 月 28 日

Unix APIs 中排名第 781

Download history 1538/week @ 2024-04-27 1099/week @ 2024-05-04 955/week @ 2024-05-11 1167/week @ 2024-05-18 971/week @ 2024-05-25 1008/week @ 2024-06-01 1805/week @ 2024-06-08 1743/week @ 2024-06-15 1292/week @ 2024-06-22 863/week @ 2024-06-29 1372/week @ 2024-07-06 986/week @ 2024-07-13 1158/week @ 2024-07-20 747/week @ 2024-07-27 693/week @ 2024-08-03 651/week @ 2024-08-10

每月下载量 3,390
13 包中使用(直接使用 2 个)

MIT/Apache

595KB
16K SLoC

aya-obj

状态

该包包含最初用于 aya 包的内部 API 代码。它已被分割出来,以便其他处理 eBPF 对象文件的项目可以使用。除非您正在编写低级 eBPF 管道工具,否则您不需要使用此包,而是应使用 aya 包。

当前的 API 仍然有几个粗糙的边缘,并且通常不如主 aya 包 API 那么精致或稳定。一如既往,欢迎改进!

概述

使用 libbpfaya-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