From b9432be792233d77abb77a8c77708eaf87fa11fb Mon Sep 17 00:00:00 2001 From: numbers Date: Thu, 12 Oct 2023 00:03:21 -0400 Subject: [PATCH] support for sections --- src/win32/pe_image.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/win32/pe_image.rs b/src/win32/pe_image.rs index cae506a..7ca9085 100644 --- a/src/win32/pe_image.rs +++ b/src/win32/pe_image.rs @@ -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 { 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,