Skip to main content

OptionalHeader

Struct OptionalHeader 

Source
pub struct OptionalHeader {
Show 30 fields pub magic: u16, pub major_linker_version: u8, pub minor_linker_version: u8, pub size_of_code: u32, pub size_of_initialized_data: u32, pub size_of_uninitialized_data: u32, pub address_of_entry_point: u32, pub base_of_code: u32, pub base_of_data: u32, pub image_base: u64, pub section_alignment: u32, pub file_alignment: u32, pub major_operating_system_version: u16, pub minor_operating_system_version: u16, pub major_image_version: u16, pub minor_image_version: u16, pub major_subsystem_version: u16, pub minor_subsystem_version: u16, pub win32_version_value: u32, pub size_of_image: u32, pub size_of_headers: u32, pub check_sum: u32, pub subsystem: u16, pub dll_characteristics: u16, pub size_of_stack_reserve: u64, pub size_of_stack_commit: u64, pub size_of_heap_reserve: u64, pub size_of_heap_commit: u64, pub loader_flags: u32, pub number_of_rva_and_sizes: u32,
}
Expand description

Parsed IMAGE_OPTIONAL_HEADER / IMAGE_OPTIONAL_HEADER64. One struct handles both PE32 and PE32+ variants; the 32-bit ImageBase / stack / heap sizes are stored as u64 for uniformity and zero-extended on read.

The data directories at the tail of the optional header aren’t stored here — see PeFile::data_directories. The number_of_rva_and_sizes field tells the encoder how many directory slots to emit.

Fields§

§magic: u16§major_linker_version: u8§minor_linker_version: u8§size_of_code: u32§size_of_initialized_data: u32§size_of_uninitialized_data: u32§address_of_entry_point: u32§base_of_code: u32§base_of_data: u32

PE32 only — the address of the data section. Always 0 in PE32+ since 64-bit images don’t have this field.

§image_base: u64§section_alignment: u32§file_alignment: u32§major_operating_system_version: u16§minor_operating_system_version: u16§major_image_version: u16§minor_image_version: u16§major_subsystem_version: u16§minor_subsystem_version: u16§win32_version_value: u32§size_of_image: u32§size_of_headers: u32§check_sum: u32§subsystem: u16§dll_characteristics: u16§size_of_stack_reserve: u64§size_of_stack_commit: u64§size_of_heap_reserve: u64§size_of_heap_commit: u64§loader_flags: u32§number_of_rva_and_sizes: u32

Implementations§

Source§

impl OptionalHeader

Source

pub fn encode(&self) -> Vec<u8>

Encode the optional header (without trailing data directories) into the buffer at offset 0. Returns the number of bytes written (96 for PE32, 112 for PE32+). The caller appends the data-directory entries after.

Trait Implementations§

Source§

impl Clone for OptionalHeader

Source§

fn clone(&self) -> OptionalHeader

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OptionalHeader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for OptionalHeader

Source§

fn eq(&self, other: &OptionalHeader) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for OptionalHeader

Source§

impl StructuralPartialEq for OptionalHeader

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.