PDB文件是否包含数据结构?

Does PDB file contain data structures?

我是 reading this document,它说 PDB 包含 type data。是不是意味着包含了C结构信息?

我在 https://github.com/microsoft/microsoft-pdb 中找不到这样的东西。似乎只有类型名称可用,但没有 C 结构或 C++ class 定义。

我错了吗?

是的,类型信息可以包含在 PDB 中。显示类型的 WinDbg 命令是 dt。如果您使用 .symfix,Microsoft 会提供一些类型定义供您下载。由于 ntdll 被加载到每个进程中,因此演示起来非常简单。

一个简单的例子是双重 linked 列表的列表条目,由正向和反向组成 link:

1:001> dt nt!_LIST_ENTRY
ntdll!_LIST_ENTRY
   +0x000 Flink            : Ptr64 _LIST_ENTRY
   +0x008 Blink            : Ptr64 _LIST_ENTRY

或 Unicode 字符串:

1:001> dt _UNICODE_STRING
ntdll!_UNICODE_STRING
   +0x000 Length           : Uint2B
   +0x002 MaximumLength    : Uint2B
   +0x008 Buffer           : Ptr64 Wchar

或临界区:

1:001> dt _RTL_CRITICAL_SECTION
ntdll!_RTL_CRITICAL_SECTION
   +0x000 DebugInfo        : Ptr64 _RTL_CRITICAL_SECTION_DEBUG
   +0x008 LockCount        : Int4B
   +0x00c RecursionCount   : Int4B
   +0x010 OwningThread     : Ptr64 Void
   +0x018 LockSemaphore    : Ptr64 Void
   +0x020 SpinCount        : Uint8B