From f9c58b9d960124a0e84a399333c19f1fa8e4b838 Mon Sep 17 00:00:00 2001 From: tzlil Date: Tue, 21 Mar 2023 23:29:54 +0200 Subject: listing all symbols --- src/main.rs | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/main.rs b/src/main.rs index c900d2a..5e6a07c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ use std::io::Read; struct Elf { header: &'static ElfHeader, sections: &'static [ElfSectionHeader], - // symbols: &'static Vec, + symbols: &'static [ElfSymbol], strtab: *const u8, } @@ -35,36 +35,38 @@ impl Elf { .iter() .find(|&&sec| sec.r#type == ElfSectionType::SymTab) .expect("No symbol table!"); - let symstrtab = unsafe { bytes.as_ptr().add(symtab.link as usize) }; - let symbols: Vec<&str> = unsafe { + //dbg!(§ions[symtab.link as usize]); + let symstrtab = §ions[symtab.link as usize]; + let symbols = unsafe { std::slice::from_raw_parts( bytes.as_ptr().add(symtab.offset as usize) as *const ElfSymbol, (symtab.size / symtab.entsize) as usize, ) - } - .iter() - .filter(|sym| sym.shndx != 0) - .map(|sym| unsafe { - std::ffi::CStr::from_ptr(symstrtab.add(sym.name as usize) as *const i8) - .to_str() - .unwrap_or("") - }) - .filter(|name| name.len() > 1) - .collect(); - dbg!(symbols); - // for sym in symbols { + }; + + // dbg!(symbols.len()); + // .iter() + // .filter(|sym| sym.shndx != 0) + // .filter_map(|sym| unsafe { + // std::ffi::CStr::from_ptr(std::ptr::addr_of!(symstrtab).add(sym.name as usize) as *const i8).to_str().ok() + // }) + // .filter(|name| name.len() > 1) + // .collect(); + // dbg!(symbols); + for sym in symbols { // dbg!(sym); - // let name = unsafe { - // std::ffi::CStr::from_ptr(symstrtab.add(sym.name as usize) as *const i8) - // .to_str() - // .unwrap_or("") - // }; - // dbg!(name); - // } + let name = unsafe { + std::ffi::CStr::from_ptr(bytes.as_ptr().add(symstrtab.offset as usize).add(sym.name as usize) as *const i8) + .to_str() + .unwrap_or("") + }; + dbg!(name); + } Elf { header, sections, + symbols, strtab, } } -- cgit 1.4.1