elf_parser 0.1.1

A minimal no_std ELF (32/64) parser.
Documentation
extern crate elf_parser;
use elf_parser::{Elf32, Elf64};

#[test]
fn elf64_shdr() {
    let bytes = include_bytes!("./data/elf64");
    let elf64 = Elf64::from_bytes(bytes).unwrap();
    let ehdr = elf64.ehdr();
    let shdr_iter = elf64.shdr_iter();
    assert_eq!(elf64.shdr_num(), ehdr.e_shnum);
    for (i, shdr) in shdr_iter.enumerate() {
        assert_eq!(elf64.shdr_nth(i as u16).unwrap(), shdr);
    }
    let shdr1 = elf64.shdr_nth(1).unwrap();
    assert_eq!(shdr1.sh_name, 0x1b);
    assert_eq!(shdr1.sh_type, 0x1);
    assert_eq!(shdr1.sh_flags, 0x2);
    assert_eq!(shdr1.sh_addr, 0x400318);
    assert_eq!(shdr1.sh_offset, 0x318);
    assert_eq!(shdr1.sh_size, 0x1c);
    assert_eq!(shdr1.sh_link, 0x0);
    assert_eq!(shdr1.sh_info, 0x0);
    assert_eq!(shdr1.sh_addralign, 0x1);
    assert_eq!(shdr1.sh_entsize, 0x0);

    let shdr17 = elf64.shdr_nth(17).unwrap();
    assert_eq!(shdr17.sh_name, 0xc9);
    assert_eq!(shdr17.sh_type, 0xe);
    assert_eq!(shdr17.sh_flags, 0x3);
    assert_eq!(shdr17.sh_addr, 0x403e50);
    assert_eq!(shdr17.sh_offset, 0x2e50);
    assert_eq!(shdr17.sh_size, 0x8);
    assert_eq!(shdr17.sh_link, 0x0);
    assert_eq!(shdr17.sh_info, 0x0);
    assert_eq!(shdr17.sh_addralign, 0x8);
    assert_eq!(shdr17.sh_entsize, 0x8);
}

#[test]
fn elf32_shdr() {
    let bytes = include_bytes!("./data/elf32");
    let elf32 = Elf32::from_bytes(bytes).unwrap();
    let ehdr = elf32.ehdr();
    let shdr_iter = elf32.shdr_iter();
    assert_eq!(elf32.shdr_num(), ehdr.e_shnum);
    for (i, shdr) in shdr_iter.enumerate() {
        assert_eq!(elf32.shdr_nth(i as u16).unwrap(), shdr.unwrap());
    }

    let shdr10 = elf32.shdr_nth(10).unwrap();
    assert_eq!(shdr10.sh_name, 0x83);
    assert_eq!(shdr10.sh_type, 0x9);
    assert_eq!(shdr10.sh_flags, 0x42);
    assert_eq!(shdr10.sh_addr, 0x350);
    assert_eq!(shdr10.sh_offset, 0x350);
    assert_eq!(shdr10.sh_size, 0x8);
    assert_eq!(shdr10.sh_link, 0x5);
    assert_eq!(shdr10.sh_info, 0x16);
    assert_eq!(shdr10.sh_addralign, 0x4);
    assert_eq!(shdr10.sh_entsize, 0x8);

    let shdr11 = elf32.shdr_nth(11).unwrap();
    assert_eq!(shdr11.sh_name, 0x8c);
    assert_eq!(shdr11.sh_type, 0x1);
    assert_eq!(shdr11.sh_flags, 0x6);
    assert_eq!(shdr11.sh_addr, 0x358);
    assert_eq!(shdr11.sh_offset, 0x358);
    assert_eq!(shdr11.sh_size, 0x23);
    assert_eq!(shdr11.sh_link, 0x0);
    assert_eq!(shdr11.sh_info, 0x0);
    assert_eq!(shdr11.sh_addralign, 0x4);
    assert_eq!(shdr11.sh_entsize, 0x0);
}