公共符号和专用符号

生成驱动程序或其他程序时,程序符号通常存储在 符号文件中,尽管某些较旧的编译器将某些符号存储在可执行文件中。 当调试器分析程序时,它需要访问程序的符号。

通常,符号文件可以包括以下任何符号或所有符号:

  • 所有函数的名称和地址

  • 所有数据类型、结构和类定义

  • 全局变量的名称、数据类型和地址

  • 局部变量的名称、数据类型、地址和范围

  • 源代码中对应于每个二进制指令的行号

某些计划开发人员可能会感到不舒服地与客户共享所有这些信息。 BinPlace 可用于减少符号文件中的符号量。

即使是最基本的调试,也需要一些基本符号,例如函数名称和全局变量。 这些称为 公共符号。 在一个对象文件中仅显示的数据结构名称、全局变量、局部变量和行号信息等符号并非总是需要调试,尽管它们对于更深入的调试会话很有用。 这些符号称为 专用符号

包含私有符号和公共符号的符号文件称为 完整符号文件。 仅包含公共符号的符号文件称为 带状符号文件

BinPlace 可以创建精简符号文件。 它通过创建仅包含公共符号的新符号文件来执行此作;删除专用符号(“剥离”)。 使用最常见的 BinPlace 选项时(-a -x -s -n),剥离的符号文件将放置在 -s 开关后列出的目录中,而完整的符号文件将放置在 -n 开关后列出的目录中。

当 BinPlace 剥离一个符号文件时,剥离版和完整版会被赋予相同的签名和其他标识信息。 这允许你使用任一版本进行调试。

注意 当符号文件与可执行文件位于同一目录中时,BinPlace 会将专用符号带出符号文件,并在 BinPlace 命令行上指定 可执行文件 的名称(以及相应的选项)。 不应指定符号文件本身的名称 -- 这样做将导致 BinPlace 移动文件而不对其进行更改。

如果需要确定符号文件是否包含专用符号,可以使用 SymChk 工具。 SymChk 是 Windows 程序包调试工具的一部分。 有关详细信息,请参阅 SymChk 和 Windows 调试

如果您要将驱动程序提交到 Windows 硬件认证计划,可以提交剥离的符号文件,以避免与 Microsoft 共享专用符号。 BinPlace 剥离的符号文件不会公开驱动程序体系结构中通常被视为机密的任何部分。 有关详细信息,请参阅 Windows 硬件认证计划