summary refs log tree commit diff
path: root/src/main.rs
blob: 3033eced833484b90d58f877f5b6cef36f5cdc71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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);
}