Crate aya_obj

Source
Expand description

An eBPF object file parsing library with BTF and relocation support.

§Status

This crate includes code that started as internal API used by the aya crate. It has been split out so that it can be used by other projects that deal with eBPF object files. Unless you’re writing low level eBPF plumbing tools, you should not need to use this crate but see the aya crate instead.

The API as it is today has a few rough edges and is generally not as polished nor stable as the main aya crate API. As always, improvements welcome!

§Overview

eBPF programs written with libbpf or aya-bpf are usually compiled into an ELF object file, using various sections to store information about the eBPF programs.

aya-obj is a library for parsing such eBPF object files, with BTF and relocation support.

§Example

This example loads a simple eBPF program and runs it with 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
#[cfg(feature = "std")]
let text_sections = std::collections::HashSet::new();
#[cfg(not(feature = "std"))]
let text_sections = hashbrown::HashSet::new();
object.relocate_calls(&text_sections).unwrap();
object.relocate_maps(std::iter::empty(), &text_sections).unwrap();

// Run with rbpf
let function = object.functions.get(&object.programs["prog_name"].function_key()).unwrap();
let instructions = &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();

Re-exports§

pub use maps::Map;
pub use obj::*;

Modules§

btf
BTF loading, parsing and relocation.
generated
eBPF bindings generated by rust-bindgen
links
Link type bindings.
maps
Map struct and type bindings.
obj
Object file loading, parsing, and relocation.
programs
Program struct and type bindings.
relocation
Program relocation handling.

Structs§

VerifierLog
An error returned from the verifier.