use core::fmt::{self, Display, Formatter};
use core::ops::Range;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct PeOffsetError;
impl Display for PeOffsetError {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "an offset within the PE is invalid")
}
}
#[cfg(feature = "std")]
impl std::error::Error for PeOffsetError {}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PeOffsets {
pub check_sum: usize,
pub after_check_sum: usize,
pub security_data_dir: usize,
pub after_security_data_dir: usize,
pub after_header: usize,
}
pub trait PeTrait {
fn data(&self) -> &[u8];
fn num_sections(&self) -> usize;
fn section_data_range(
&self,
index: usize,
) -> Result<Range<usize>, PeOffsetError>;
fn certificate_table_range(
&self,
) -> Result<Option<Range<usize>>, PeOffsetError>;
fn offsets(&self) -> Result<PeOffsets, PeOffsetError>;
}