readelf/
readelf.rs

1extern crate elf_rs;
2
3use std::env;
4use std::fs::File;
5use std::io::Read;
6
7use elf_rs::*;
8
9fn read_elf(filename: &str) -> Result<(), ()> {
10    let mut elf_file = File::open(filename).map_err(|e| {
11        println!("failed to open file {}: {}", filename, e);
12        ()
13    })?;
14    let mut elf_buf = Vec::<u8>::new();
15
16    elf_file.read_to_end(&mut elf_buf).map_err(|e| {
17        println!("failed to read file {}: {}", filename, e);
18        ()
19    })?;
20
21    let elf = Elf::from_bytes(&mut elf_buf).map_err(|e| {
22        println!("failed to extract elf file {}: {:?}", filename, e);
23        ()
24    })?;
25
26    println!("{:#x?}", elf);
27
28    println!("{:#?}", elf.elf_header());
29
30    for p in elf.program_header_iter() {
31        println!("{:#x?}", p);
32    }
33
34    for s in elf.section_header_iter() {
35        println!("{:#x?}", s);
36    }
37
38    if let Some(s) = elf.lookup_section(b".text") {
39        println!(".test section: {:#x?}", s);
40    }
41
42    Ok(())
43}
44
45fn main() -> Result<(), ()> {
46    let args: Vec<String> = env::args().collect();
47    if args.len() < 2 {
48        println!("Need specify file path!");
49        return Err(());
50    }
51
52    let filename = &args[1];
53    read_elf(&filename)?;
54
55    Ok(())
56}