背景
我们都使用了visualstudio调试器来单步执行代码,寻找 漏洞。 对于C或C++代码,调试器依赖于文件, 扩展名“.pdb”,称为“程序数据库”,或简称为“pdb”。 PDB是在构建程序时由链接器编写的;它包含 行号和符号信息。
但谎言是什么 在这些PDB里面,确切地说?
大多数C/C++开发者不必担心答案。 但对那些少数人来说,工作 在诸如编译器、链接器、分析器和验证器之类的工具上,了解细节是很有用的。 尤其是你想要的地方 在更广泛范围内工作的工具 窗户 生态系统: 例如,允许您自己的编译器编写pdb,以便使用您的编译器构建的应用程序可以在现有Windows调试器下执行。
为了满足这些少数人的需要,和/或读者的兴趣,我们 最近有 创建了一个GitHub repo,您可以在其中浏览创建pdb的实际链接器代码。
前 API和文档
我们已经发布了PDB内容的大纲信息 在过去的几年里。 这包括 用于读写PDB的API。 例如:
- PDB文件说明: https://support.microsoft.com/en-us/kb/121366
- 查询PDB: https://msdn.microsoft.com/en-us/library/eee38t3h.aspx
- 调试接口访问SDK: https://msdn.microsoft.com/en-us/library/x93ctkx8(对80).aspx
如果您想在Windows上读写pdb,我们强烈建议您使用已经发布的api。 这样就把细节抽象出来,完成了工作。 然而,对于那些想深入挖掘的人。
源代码
请浏览GitHub repo中的内容: https://github.com/Microsoft/microsoft-pdb
回购协议包括7个文件夹。 一个好的地方开始你的探索将在/cvdump。 这是正确的 .转储的工具的h和.cpp文件 PDB的内容。
在/include和/langapi/include文件夹中查找其他有用的头文件。 同时 /PDB测试 保存一个小的.cpp文件,用于检查PDB的健全性。
最后,docs文件夹提供了相关信息的链接列表。
请注意,回购并不 包括构建文件,这样您就可以浏览代码来帮助理解PDB。 还要注意的是,代码是在 麻省理工许可证 .
下一个?
我们会尽量保留这个 GitHub repo对PDB格式的任何更改都是最新的。 格式已经建立很久了,所以正在进行的更改很少,而且通常很小。
PDB格式很复杂。 我们不确定到目前为止上传的文件是否提供了您可能需要的所有详细信息。 如果你有简短的问题,请发表评论到这个博客。 但是对于问题(例如:我需要查看定义XXX结构的头文件),请直接在GitHub项目中归档,以便我们可以跟踪和响应。