- Features
- Requirements
- Quick Start
- Advanced Usage
- Command Line Options
- Output Formats
- Use Cases
- Technical Notes
- Building
- Examples
- Performance
- Legal
- Auto-download PDB files from Microsoft Symbol Server with robust error handling
- Kernel symbol resolution for critical Windows functions
- Structure analysis with accurate member offsets and sizes
- Regex pattern matching and symbol search
- JSON export with complete symbol information
- Batch processing of multiple PDB files with optional JSON export
- PDB comparison and diff analysis
- Performance benchmarking with enhanced caching
- Windows 10/11 x64
- Visual Studio 2019/2022 with DIA SDK
- Internet connection for auto-download feature
- Download and analyze kernel symbols:
PDBParser.exe -auto C:\Windows\System32\ntoskrnl.exe -kernel
- Analyze your own PDB:
PDBParser.exe YourApp.pdb
- Find specific symbol:
PDBParser.exe app.pdb -s "CreateFileW"
- Search by pattern:
PDBParser.exe app.pdb -p ".*Thread.*"
- Export to JSON:
PDBParser.exe app.pdb -export results.json
- Compare two PDB versions:
PDBParser.exe -diff old.pdb new.pdb -export changes.json
- Batch process all PDB files in a directory and optionally export to a single JSON file:
PDBParser.exe -batch C:\Symbols\ -export C:\Analysis\batch_results.json
- Analyze a structure's layout:
PDBParser.exe ntdll.pdb -t "_PEB"
- Find a member's offset within that structure:
PDBParser.exe ntdll.pdb -m "_PEB" "ProcessHeap"
- Function hunting with regex:
PDBParser.exe malware.pdb -p ".*(Crypt|Hash|Encrypt).*" -export crypto.json
- Performance testing:
PDBParser.exe large.pdb -perf
Mode/Option | Arguments | Description |
---|---|---|
(default) | <pdb_file> |
Analyze a specific PDB file |
-auto |
<exe_file> |
Download PDB for an executable from MS Symbol Server |
-s |
<symbol> |
Find specific symbol |
-t |
<struct> |
Analyze structure layout |
-m |
<struct> <member> |
Find structure member offset |
-p |
<pattern> |
Search by regex pattern |
-l |
— | List structures |
-perf |
— | Performance test |
-export |
<file> |
Export to JSON |
-kernel |
— | Resolve kernel symbols |
-diff |
<old> <new> |
Compare two PDB files |
-batch |
<input_dir> [-export <file>] |
Process all PDBs in input directory, optionally export to a single JSON |
-full |
— | Complete analysis (default) |
- Symbol information includes RVA addresses, sizes, and type IDs
- Structure analysis shows accurate member layouts and offsets
- JSON exports contain complete symbol tables and metadata
- Performance metrics show enumeration speed and cache efficiency
- Malware analysis and reverse engineering
- Windows kernel research and exploit development
- Security vulnerability research
- Binary analysis and code archaeology
- Automated symbol extraction for tools
- Built on Microsoft DIA SDK for maximum compatibility
- Enhanced caching for faster repeated lookups
- Supports modern PDB formats and symbol types
- Memory-efficient design handles large PDB files (500MB+)
- Exception-safe code with improved error handling for PDB availability and structure analysis
- Clone the repository
- Open the solution in Visual Studio 2019/2022
- Ensure the Desktop development with C++ workload is installed
- Build the Release / x64 configuration
- No external dependencies required
Some commands, like structure analysis or finding member offsets, require a valid PDB file. If you try:
PDBParser.exe ntdll.pdb -m "_UNICODE_STRING" "Buffer"
and the PDB file is not present in the directory, you will get an error:
Error: PDB file not found: ntdll.pdb
To resolve this, use the -auto
mode to automatically download the PDB from Microsoft:
PDBParser.exe -auto C:\Windows\System32\ntdll.dll -t "_LDR_DATA_TABLE_ENTRY"
This ensures that the necessary PDB is available and analysis can proceed without errors.
PDBParser.exe -auto C:\Windows\System32\ntdll.dll -t "_LDR_DATA_TABLE_ENTRY"
Output:
Attempting to download PDB for executable...
Successfully downloaded PDB: C:\Symbols\ntdll.pdb\<GUID>\ntdll.pdb
================================================
Structure: _LDR_DATA_TABLE_ENTRY (Size: 312 bytes)
Members:
+0x0000 | 00000000 | InLoadOrderLinks
+0x0010 | 00000000 | InMemoryOrderLinks
+0x0020 | 00000000 | InInitializationOrderLinks
+0x0030 | 00000000 | DllBase
+0x0038 | 00000000 | EntryPoint
+0x0040 | 00000000 | SizeOfImage
+0x0048 | 00000000 | FullDllName
+0x0058 | 00000000 | BaseDllName
+0x0068 | 00000001 | Flags
...
+0x0130 | 00000000 | HotPatchState
PDBParser.exe -auto C:\Windows\System32\ntoskrnl.exe -kernel
Output:
Attempting to download PDB for executable...
Successfully downloaded PDB: C:\Symbols\ntkrnlmp.pdb\<GUID>\ntkrnlmp.pdb
[+] All kernel symbols resolved!
WmipSMBiosTableLength = 0x1234
PsEnumProcesses = 0x5678
PspInsertProcess = 0x9ABC
...
PDBParser.exe app.pdb -s "CreateFileW"
Output:
Found: CreateFileW @ RVA 0x123456
PDBParser.exe app.pdb -p ".*Thread.*"
Output:
Found: PsCreateThread @ RVA 0x234567
Found: PsTerminateThread @ RVA 0x345678
PDBParser.exe ntdll.pdb -m "_UNICODE_STRING" "Buffer"
Output:
Member Buffer offset = 0x8
PDBParser.exe -diff v1.pdb v2.pdb -export version_diff.json
Output:
Differences exported to version_diff.json
Note: The -batch
command will process PDB files in a folder, but it requires valid PDB files. If PDBs are not present, use the -auto
mode to download them from Microsoft.
Example: Auto-download and export a single PDB
PDBParser.exe -auto C:\Windows\System32\comctl32.dll -export C:\Analysis\comctl32.json
Output:
Attempting to download PDB for executable...
Downloading PDB from: https://msdl.microsoft.com/download/symbols/comctl32.pdb/<GUID>/comctl32.pdb
Saving to: C:\Symbols\comctl32.pdb\<GUID>\comctl32.pdb
Successfully downloaded PDB: C:\Symbols\comctl32.pdb\<GUID>\comctl32.pdb
============================================================
Export Results
============================================================
Exporting to: C:\Analysis\comctl32.json
Export successful
Example: Batch processing a directory of PDBs (already downloaded)
PDBParser.exe -batch C:\Symbols\ -export C:\Analysis\batch_results.json
Output:
Processing: C:\Symbols\comctl32.pdb
Processing: C:\Symbols\ntdll.pdb
...
Batch processing complete. Results exported to C:\Analysis\batch_results.json
PDBParser.exe large.pdb -perf
Output:
5000 symbols parsed in ~50ms
Individual lookups in ~5 microseconds (cached)
- 5000 symbols parsed in ~50ms
- Individual lookups in ~5 microseconds (cached)
- Large PDB files supported up to 500MB
- Download speeds limited by network connection
For legitimate security research and educational use only.
Users are responsible for compliance with applicable laws.
Not intended for malicious purposes.