bpf_loader_lib/
elf_container.rs1use anyhow::{anyhow, Result};
8use object::ElfFile;
9use ouroboros::self_referencing;
10#[self_referencing]
14pub struct ElfContainer {
15 bin: Vec<u8>,
16 #[borrows(bin)]
17 #[covariant]
18 pub(crate) elf: ElfFile<'this>,
19}
20
21impl ElfContainer {
22 pub fn new_from_binary(bin: &[u8]) -> Result<Self> {
24 let bin = bin.to_vec();
25 let val = ElfContainerTryBuilder {
26 bin,
27 elf_builder: |vec: &Vec<u8>| {
28 ElfFile::parse(&vec[..]).map_err(|e| anyhow!("Failed to parse elf: {}", e))
29 },
30 }
31 .try_build()?;
32 Ok(val)
33 }
34}