elf_loader 0.15.0

A no_std-friendly ELF loader, runtime linker, and JIT linker for Rust.
#[path = "common/mod.rs"]
mod fixture_support;

use elf_loader::{Loader, Result, loader::LoadHookContext};

fn main() -> Result<()> {
    unsafe { std::env::set_var("RUST_LOG", "trace") };
    env_logger::init();

    let mut loader = Loader::new().with_hook(|ctx: &LoadHookContext| {
        println!("Loading segment for {}:", ctx.path());
        println!("  Type: {:?}", ctx.phdr().program_type());
        println!("  Offset: 0x{:x}", ctx.phdr().p_offset());
        println!("  Vaddr: 0x{:x}", ctx.phdr().p_vaddr());
        println!("  Filesz: 0x{:x}", ctx.phdr().p_filesz());
        println!("  Memsz: 0x{:x}", ctx.phdr().p_memsz());
        println!("  Flags: {:?}", ctx.phdr().flags());
        Ok(())
    });

    let fixtures = fixture_support::ensure_all();
    let _lib = loader
        .load_dylib(fixtures.liba_str())?
        .relocator()
        .relocate()?;
    println!("Loaded with segment hook.");

    Ok(())
}