peview

A minimal and fast zero-copy parser for the PE32+ file format.

Build status Docs.rs Crates.io

Goal

This project aims to offer a more light weight and easier to use alternative to fully featured binary parsing libraries when it comes to parsing the PE32+ file format. It does so by:

Usage

Example of printing the RVA's and names of imported symbols:

```rust use peview::{dir::Import, file::PeView}; use std::{error::Error, fs::File, io::Read};

fn main() -> Result<(), Box> { // Read file into buffer and parse it let mut buf = Vec::new(); File::open("etc/exe/ntoskrnl.exe")?.readtoend(&mut buf)?; let pe = PeView::parse(&buf)?;

// Iterate over modules in the import table
for m in pe.imports()? {
    // Print the current modules name
    let module = m?;
    println!("{}", module.name()?);

    // Iterate over symbols within the module
    for i in module {
        // Check if the symbol is imported by name
        if let Import::Name(h, n) = i? {
            // Print out both the hint and its name
            println!("> {:#04x}: {}", h, n);
        }
    }
}

Ok(())

} ``` More usage examples can be found here.

Installation

Add the following line to your Cargo.toml file:

```toml [dependencies]

...

peview = "0.2.3" ```

License

MIT