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}