6 releases

0.2.3 Mar 4, 2024
0.2.2 Feb 29, 2024
0.2.1 Jan 18, 2024
0.1.1 Dec 14, 2023
0.1.0 Jul 25, 2023

#625 in Parser implementations

Download history 80/week @ 2024-01-13 72/week @ 2024-02-03 240/week @ 2024-02-10 101/week @ 2024-02-17 789/week @ 2024-02-24 701/week @ 2024-03-02 312/week @ 2024-03-09 333/week @ 2024-03-16 221/week @ 2024-03-23 534/week @ 2024-03-30 278/week @ 2024-04-06 758/week @ 2024-04-13 554/week @ 2024-04-20

2,134 downloads per month
Used in 2 crates (via framehop)

MIT license

50KB
956 lines

crates.io page docs.rs page

pe-unwind-info

A zero-copy parser for the contents of the .pdata section and unwind info structures (typically addressed by the contents of the .pdata section).

This library provides low-level, efficient parsers for the function tables in .pdata as well as unwind info structures in other places. On top of this functionality, higher-level functionality to unwind an entire frame (given a module's contents) is provided. This only copies data as necessary. No heap allocations are needed.

This currently targets x86_64 PE modules. ARM64 support will be added soon.

This library assumes all information is little-endian: as far as I can tell, Windows always either targets little-endian-only CPUs or configures CPUs which support little- and big-endian to be little-endian.


lib.rs:

Zero-copy parsers of the contents of the .pdata section and unwind information in PE binaries.

On top of these parsers, some higher-level interfaces are provided to easily unwind frames. The parsers and the higher interfaces are written with efficiency in mind, doing minimal copying of data. There is no heap allocation.

Dependencies

~1.1–1.7MB
~32K SLoC