use core::fmt;
use crate::field::Field;
#[derive(PartialEq, Eq, Debug)]
pub enum PEType {
PE32,
PE32Plus,
}
pub enum ImageBase {
Base32(u32),
Base64(u64),
}
pub enum Architecture {
X86,
X64,
Unknown,
}
impl fmt::Display for Architecture {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match *self {
Architecture::X86 => "x86",
Architecture::X64 => "x64",
Architecture::Unknown => "Unknown",
};
write!(f, "{s}")
}
}
impl Architecture {
pub fn from_u16(value: u16) -> Self {
match value {
0x014c => Architecture::X86,
0x8664 => Architecture::X64,
_ => Architecture::Unknown,
}
}
}
pub struct PeHeader {
pub architecture: Field<String>, pub entry_point: Field<u32>, pub size_of_image: Field<u32>, pub number_of_sections: Field<u16>, pub checksum: Field<u32>, pub section_alignment: Field<u32>, pub file_alignment: Field<u32>, pub size_of_headers: Field<u32>, pub base_of_code: Field<u32>, pub base_of_data: Field<u32>, pub image_base: Field<ImageBase>, pub subsystem: Field<u16>, pub dll_characteristics: Field<u16>, pub pe_type: PEType, }