mod structs; use crate::structs::ElfHeader; #[repr(C)] #[derive(Debug)] struct Elf { header: &'static ElfHeader, } impl Elf { pub fn new(bytes: &[u8]) -> Elf { let header = unsafe { &*(bytes.as_ptr() as *const ElfHeader) }; assert_eq!(&header.ident.magic, b"\x7fELF"); Elf { header } } } // readelf behavior here impl std::fmt::Display for Elf { fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { formatter.write_str("ELF Header:\n"); formatter.write_fmt(format_args!("{}", self.header)) } } fn main() { let data = include_bytes!("../elf"); let elf = Elf::new(&data[..]); println!("{}", elf); }