Windows 如何知道哪个PDB文件包含给定结构的类型信息?

Windows 如何知道哪个PDB文件包含给定结构的类型信息?,windows,debugging,winapi,debug-symbols,Windows,Debugging,Winapi,Debug Symbols,我正在将一些Windows头文件翻译成Delphi。为了验证相关C结构的对齐,我需要转储某些PDB文件以查看相关的类型信息。为此,我尝试使用,但该工具要求我选择要检查的PDB文件。如何知道哪个PDB文件包含所需的结构定义?使用SysInternals(现在是MS)中的strings.exe命令行实用程序。我运行了以下strings-s在my symbols文件夹中查找DSTR/i critical_部分,并获得许多有趣的输出: C:\debuggers-v6.12.2.633-x86\sym\v

我正在将一些Windows头文件翻译成Delphi。为了验证相关C结构的对齐,我需要转储某些PDB文件以查看相关的类型信息。为此,我尝试使用,但该工具要求我选择要检查的PDB文件。如何知道哪个PDB文件包含所需的结构定义?

使用SysInternals(现在是MS)中的strings.exe命令行实用程序。我运行了以下
strings-s在my symbols文件夹中查找DSTR/i critical_部分
,并获得许多有趣的输出:

C:\debuggers-v6.12.2.633-x86\sym\verifier.pdb\8878279C450C4F4DA6B252A4B824B4981\verifier.pdb:_RTL_CRITICAL"
C:\debuggers-v6.12.2.633-x86\sym\verifier.pdb\8878279C450C4F4DA6B252A4B824B4981\verifier.pdb:U_RTL_CRITICAL_段@@
C:\debuggers-v6.12.2.633-x86\sym\wntdll.pdb\B193CACD9AB340E7BF344EA1ABBE0482\wntdll.pdb:_RTL_CRITICAL_段
C:\debuggers-v6.12.2.633-x86\sym\wntdll.pdb\B193CACD9AB340E7BF344EA1ABBE0482\wntdll.pdb:U_RTL_CRITICAL_段@@
C:\debuggers-v6.12.2.633-x86\sym\wntdll.pdb\b193cacd9ab340e7bb344ea1abbe0482\wntdll.pdb:_RTL_CRITICAL_SECTION_DEBUG

使用hex editor调查PDB文件后,我使用类似grep的工具搜索包含以下正则表达式模式的PDB文件名,以确定哪个PDB文件包含所需的结构定义:

\x15\x00\x00\x80\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_Struct_Name\x00

你真的有这么多的候选人,以至于在找到你需要的人之前,你不能尝试所有的候选人吗?@Rob,也许我可以做一些猜测,但这似乎不是一个聪明的方法,而且翻译非特定的标题(如
WinNT.h
)可能会很痛苦。我只是希望有一个更简单的方法来做到这一点。既然Embarcadero和绝地计划已经有了翻译,为什么还要翻译WinNT.h?另一种技术:用C语言编译一个测试程序,打印出您感兴趣的类型的详细信息。通常,只要
sizeof
就足够了。顺便说一下,该程序的PDB也会包含您需要的信息。@Rob,我说的是“例如”。然而,事实上,我翻译了一些新版本Windows中引入的
WinNT.h
结构,如TOKEN\u USER\u声明等。Embarcadero没有翻译这些结构。Rob,谢谢你的建议。@Marc\u Sherman,+1激励我找到更好的解决方案。:-)