Module object::read::pe

source ·
Expand description

Support for reading PE files.

Traits are used to abstract over the difference between PE32 and PE32+. The primary trait for this is ImageNtHeaders.

High level API

PeFile implements the Object trait for PE files. PeFile is parameterised by ImageNtHeaders to allow reading both PE32 and PE32+. There are type aliases for these parameters (PeFile32 and PeFile64).

Low level API

The ImageNtHeaders trait can be directly used to parse both pe::ImageNtHeaders32 and pe::ImageNtHeaders64.

Example for low level API

use object::pe;
use object::read::pe::ImageNtHeaders;
use std::error::Error;
use std::fs;

/// Reads a file and displays the name of each section.
fn main() -> Result<(), Box<dyn Error>> {
   let data = fs::read("path/to/binary")?;
   let dos_header = pe::ImageDosHeader::parse(&*data)?;
   let mut offset = dos_header.nt_headers_offset().into();
   let (nt_headers, data_directories) = pe::ImageNtHeaders64::parse(&*data, &mut offset)?;
   let sections = nt_headers.sections(&*data, offset)?;
   let symbols = nt_headers.symbols(&*data)?;
   for section in sections.iter() {
       println!("{}", String::from_utf8_lossy(section.name(symbols.strings())?));
   }
   Ok(())
}

Re-exports

Structs

Enums

Traits

Functions

Type Aliases