Cannot get frame info using DIA SDK from x64 native PDB files - by GiantWarlord

Status : 


Sign in
to vote
ID 790329 Comments
Status Closed Workarounds
Type Bug Repros 0
Opened 6/17/2013 12:51:52 PM
Access Restriction Public


Using DIA SDK, I cannot get the frame info from any native x64 PDB file.

Sign in to post a comment.
Posted by GiantWarlord on 7/8/2013 at 6:30 PM
Great, it looks like it works!

Thank you very much
Posted by YongKang [MSFT] on 7/8/2013 at 3:47 PM
Each PDATA entry consists of three RVAs -- region starting RVA, region ending RVA, following by RVA to unwind info. We can do the following to map from PDATA entry to its corresponding XDATA:

1). Read in all PDATA entries from PDB, and find the smallest RVA to unwind info, say it is rvaMinPdata.
2). Read all XDATA from PDB into a buffer, say pbXDATA[].
3). For a given PDATA entry, its XDATA is in pbXDATA + RVA_to_unwind_info_in_this_PDATA_entry - rvaMinPdata.
Posted by GiantWarlord on 7/8/2013 at 2:32 PM
OK, I understand that.

Can you give me a hint on how to find the relevant unwind info in the XDATA section by using the function info from PDATA section?

I mean, in the PDATA function entry structure, the addresses (RVA), including the unwind info structure address are relative to the binary.
But if I cannot use the binary, but I want to find this unwind info in the same PDB file, how can I map the address of the unwind info in the binary to the address of the unwind info in the PDB XDATA?

Posted by YongKang [MSFT] on 7/3/2013 at 9:48 PM
Yes, PDATA and XDATA could be present in PDBs for x64 binaries. But usually they are only in binaries but not in PDBs.

To retrieve PDATA and XDATA from PDB, we can refer to the sample (Dia2Dump) shipped in DIA SDK (which is shipped in VS), and the relevant code is for option "-dbg".
Posted by GiantWarlord on 6/25/2013 at 11:49 AM
Actually, I believe PDATA and XDATA is present In the x64 PDB files from Windows 7 x64 symbol distribution.
So I was hoping there would be a way to retrieve such info from PDB files if it is available using DIA SDK.

I am wondering how WinDbg kernel mode retrieves this info if not from PDB files?

Posted by YongKang [MSFT] on 6/24/2013 at 3:04 PM
If the frame info is what would be output by "dia2dump -fpo <PDB-file>", then it is by design that it only works on x86 binaries, because only x86 binaries have frame info. x64 binary doesn't have this kind of frame info, but instead has PDATA/XDATA for stack unwinding and exception handling, and PDATA/XDATA are stored inside binary (and usually not in PDB).

YongKang Zhu
VC++ CodeGen and Tools
Posted by Microsoft on 6/18/2013 at 6:26 PM
Thank you for submitting feedback on Visual Studio and .NET Framework. Your issue has been routed to the appropriate VS development team for investigation. We will contact you if we require any additional information.
Posted by Microsoft on 6/17/2013 at 1:50 PM
Thank you for your feedback, we are currently reviewing the issue you have submitted. If this issue is urgent, please contact support directly(