pelite\wrap/
headers.rs

1use std::ops::Range;
2use crate::*;
3use super::Wrap;
4
5/// Describes the PE headers.
6impl<'a, Pe32: pe32::Pe<'a>, Pe64: pe64::Pe<'a>> Wrap<pe32::headers::Headers<Pe32>, pe64::headers::Headers<Pe64>> {
7	/// Gets the PE instance.
8	#[inline]
9	pub fn pe(&self) -> Wrap<Pe32, Pe64> {
10		match self {
11			Wrap::T32(headers) => Wrap::T32(headers.pe()),
12			Wrap::T64(headers) => Wrap::T64(headers.pe()),
13		}
14	}
15	/// Gets the PE headers as a byte slice.
16	#[inline]
17	pub fn image(&self) -> &'a [u8] {
18		match self {
19			Wrap::T32(headers) => headers.image(),
20			Wrap::T64(headers) => headers.image(),
21		}
22	}
23	/// Calculates the optional header's CheckSum.
24	#[inline]
25	pub fn check_sum(&self) -> u32 {
26		match self {
27			Wrap::T32(headers) => headers.check_sum(),
28			Wrap::T64(headers) => headers.check_sum(),
29		}
30	}
31	/// Gets the code range from the optional header.
32	#[inline]
33	pub fn code_range(&self) -> Range<u32> {
34		match self {
35			Wrap::T32(headers) => headers.code_range(),
36			Wrap::T64(headers) => headers.code_range(),
37		}
38	}
39	/// Gets the full image range excluding the PE headers.
40	#[inline]
41	pub fn image_range(&self) -> Range<u32> {
42		match self {
43			Wrap::T32(headers) => headers.image_range(),
44			Wrap::T64(headers) => headers.image_range(),
45		}
46	}
47}