pub trait ElfFile {
// Required methods
fn content(&self) -> &[u8];
fn elf_header(&self) -> ElfHeader<'_>;
fn program_header_nth(&self, index: usize) -> Option<ProgramHeaderEntry<'_>>;
fn program_header_iter(&self) -> ProgramHeaderIter<'_> ⓘ;
fn section_header_nth(&self, index: usize) -> Option<SectionHeaderEntry<'_>>;
fn section_header_iter(&self) -> SectionHeaderIter<'_> ⓘ;
// Provided methods
fn shstr_section(&self) -> Option<SectionHeaderEntry<'_>> { ... }
fn lookup_section(&self, name: &[u8]) -> Option<SectionHeaderEntry<'_>> { ... }
fn entry_point(&self) -> u64 { ... }
}
Required Methods§
fn content(&self) -> &[u8]
fn elf_header(&self) -> ElfHeader<'_>
fn program_header_nth(&self, index: usize) -> Option<ProgramHeaderEntry<'_>>
fn program_header_iter(&self) -> ProgramHeaderIter<'_> ⓘ
fn section_header_nth(&self, index: usize) -> Option<SectionHeaderEntry<'_>>
fn section_header_iter(&self) -> SectionHeaderIter<'_> ⓘ
Provided Methods§
fn shstr_section(&self) -> Option<SectionHeaderEntry<'_>>
Sourcefn lookup_section(&self, name: &[u8]) -> Option<SectionHeaderEntry<'_>>
fn lookup_section(&self, name: &[u8]) -> Option<SectionHeaderEntry<'_>>
Examples found in repository?
examples/readelf.rs (line 38)
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}