pelf

pelf at crates.io pelf at docs.rs

A Rust-native library for parsing/generating ELF.

Getting Started

Here's an example that parses elf file and show the attributes of its header.

```rust fn main() { let args: Vec = args().collect(); if args.len() != 2 { panic!("usage: demo ") }

let mut f = File::open(&args[1]).expect("failed to open elf-file");

let mut buf = Vec::with_capacity(4096);
let _ = f.read_to_end(&mut buf).expect("failed to read elf-file");

let parser = pelf::parser::ElfParserConfig::new().build();
let elf = parser
    .parse_elf_file(&buf)
    .expect("failed to parse elf-file");

match elf {
    pelf::file::ElfFile::Elf64(elf64) => {
        dump_elf64_file(elf64);
    }
    _ => unimplemented!(),
}

}

fn dumpelf64file(elf: pelf::file::Elf64File) { dumpelf64header(&elf.header); }

fn dumpelf64header(header: &pelf::header::Elf64Header) { println!("ELF Header:"); println!(" Class: {}", header.ident.class); println!(" Data: {}", header.ident.data); println!(" File Version: {}(Current)", header.ident.version); println!(" Type: {}", header.elftype); println!(" Machine: {}", header.machine); println!(" Version: 0x{:x}", header.version); println!(" Entry: 0x{:x}", header.entry); println!(" PHT Offset: 0x{:x}", header.phoff); println!(" SHT Offset: 0x{:x}", header.shoff); // println!(" Flags: 0b{:b}", header.eflags); println!(" PHT Entry Size: 0x{:x}", header.phentsize); println!(" PHT Entries: {}", header.phnum); println!(" SHT Entry Size: 0x{:x}", header.shentsize); println!(" SHT Entries: {}", header.shnum); println!(" Section Header String Table Index: {}", header.shstrndx); } ```

features

Run examples

the other examples are placed in examples.

```bash

parser example

$ cargo run --example demo /usr/bin/ls ```