10 releases (5 breaking)

0.6.0 Jul 11, 2023
0.5.0 Oct 19, 2022
0.4.0 Jul 20, 2021
0.3.3 May 14, 2021
0.1.2 Mar 13, 2021

#547 in Debugging


Used in pdbview

MIT license

81KB
2K SLoC

API Documentation] crates.io

ezpdb

A high-level library for the fantastic pdb crate

Goal

The pdb crate provides a low-level interface for interacting with PDB files. While the crate provides very good and useful information, it may not be the easiest solution for looking at the whole slice of a PDB. From the pdb crate's README:

pdb's design objectives are similar to gimli:

  • pdb works with the original data as it's formatted on-disk as long as possible.

  • pdb parses only what you ask.

  • pdb can read PDBs anywhere. There's no dependency on Windows, on the DIA SDK, or on the target's native byte ordering.

The first two bullet points in particular can be particularly cumbersome if your application needs to iterate over every type, find one of a particular size or containing a particular field, and perform some operations on it. While you absolutely should care about speed and not performing unnecessary work, sometimes the reality is that you simply don't. This crate is for those scenarios where you just want to hack on some data and speed is not a concern.

The biggest differences are that ezpdb takes care of building the type heirarchy and copies all necessary information for ease of use.

Usage

let parsed_pdb = ezpdb::parse_pdb(&opt.file, opt.base_address)?;
println!("{:?}", parsed_pdb.assembly_info);

Dependencies

~1.2–1.8MB
~37K SLoC