公共符号和专用符号

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

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

  • 所有函数的名称和地址

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

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

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

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

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

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

同时包含私有符号和公共符号的符号文件称为 完整符号文件。 仅包含公共符号的符号文件称为 去除符号文件

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

当 BinPlace 去除符号文件时,会为该文件的去除版本和完整版本提供相同的签名和其他标识信息。 这允许使用任一版本进行调试。

注意 当符号文件与可执行文件位于同一目录中时,BinPlace 将从符号文件中去除私有符号,并且指定 可执行文件 的名称 (以及 BinPlace 命令行上的相应选项) 。 不应指定符号文件本身的名称 -- 这样做将导致 BinPlace 在不更改文件的情况下移动文件。

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

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