pdb 文件包含多少信息? (C#/.NET)

Posted

技术标签:

【中文标题】pdb 文件包含多少信息? (C#/.NET)【英文标题】:How much information do pdb files contain? (C# / .NET) 【发布时间】:2010-10-10 10:30:19 【问题描述】:

将 pdb 文件与商业应用程序一起重新分发是否明智?

有时,我会使用堆栈跟踪从已部署的应用程序中获取更详细的错误报告日志;不依赖那些文件可以实现这个功能吗?

另外,这些文件包含多少原始源代码的提示?使用它对我的应用程序进行逆向工程会更容易吗?

【问题讨论】:

如果您指定了您正在使用的环境,这将有所帮助。许多开发工具输出 PDB 文件。 【参考方案1】:

它基本上添加了以下信息:

所有非公共类型、接口、结构、类 函数中的局部变量 相关代码的源文件名和源代码中对应的行号。

所有这些结合起来使得本机代码的逆向工程非常容易。

幸运的是,您可以创建 PDB 文件的精简版本,其中仅包含带有 /PDBSTRIPPED 参数的公共信息。

哦,您编辑添加了 C#/.NET,所以我不确定“PDBSTRIPPED”是否适用。然而,即使没有任何符号信息,.NET 应用程序也很容易reverse engineer。我不介意将它们包含在 .NET 项目中。

【讨论】:

【参考方案2】:

您可以尝试使用dia2dump 查看内容。

【讨论】:

【参考方案3】:

托管的 .pdb 文件包含以下信息:

所有局部变量的名称 所有源代码文件的名称以及从 IL 指令到这些文件中的行的映射。

其他所有内容都包含在二进制文件本身中,包括所有类型的名称、成员和函数参数。

来源:PDB files: what every developer must know。

【讨论】:

【参考方案4】:

PDB 文件还包括源文件的所有 cmets。因此,使用 EXE 和 PDB 文件可以从原始源代码生成 1:1 副本。

【讨论】:

【参考方案5】:

较新的 .Net 编译器版本可以在 PDB 文件中嵌入包含所有 cmets 的完整源代码

免费的 JetBrains dotPeek 反编译器使用此 Blob 来显示反编译的代码。检查程序集 -> 元数据 -> 便携式 PDB 元数据 -> CustomDebugInformation -> 种类:guid 0003 0E8A571B-6926-466E-B4AD-8AB04611F5FE(嵌入式源)。

这在此处记录: https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#EmbeddedSource

【讨论】:

以上是关于pdb 文件包含多少信息? (C#/.NET)的主要内容,如果未能解决你的问题,请参考以下文章

在.net项目中生成的pdb是啥文件?

防止将引用的程序集 PDB 和 XML 文件复制到输出

Microsoft Visual Studio PDB文件相关事宜

RSDS pdb格式

Visual C++ PDB 文件的合理大小是多少?

如何更改符号文件 (pdb) 中源文件的位置