support for sections

This commit is contained in:
numbers
2023-10-12 00:03:21 -04:00
parent e4173020e4
commit b9432be792

View File

@@ -215,6 +215,10 @@ impl ImageBase {
&mut *(self.offset(self.dos().e_lfanew) as *mut ImageNTHeaders64)
}
pub unsafe fn sections(&self) -> &[ImageSectionHeader] {
self.nt_header().sections()
}
pub unsafe fn exports(&self) -> Option<ExportIter> {
let directory = &self.nt_header().optional_header.data_directory[ImageBase::DIRECTORY_ENTRY_EXPORT];
if directory.size == 0 || directory.virtual_address == 0 { return None; }
@@ -228,6 +232,19 @@ impl ImageBase {
}
impl ImageNTHeaders64 {
pub fn sections(&self) -> &[ImageSectionHeader] {
let section_base
= ( &self.optional_header as *const _ as usize )
+ self.file_header.size_of_optional_header as usize;
unsafe {
core::slice::from_raw_parts(
section_base as *const ImageSectionHeader,
self.file_header.number_of_sections as usize)
}
}
}
pub struct ExportIter<'a> {
image: &'a ImageBase,
export_dir: &'a ImageExportDirectory,