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
我是 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