公用符号和专用符号

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

通常,符号文件可以包含以下任意或全部符号:

  • 所有函数的名称和地址

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

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

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

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

某些程序开发人员可能不希望与其客户共享所有此信息。BinPlace 可用于减少符号文件中符号的数量。

某些基础符号(例如,函数名称和全局变量)对于最基本的调试也是必需的。它们被称为“公共符号”。一些符号(例如,数据结构名称、仅在一个对象文件中可见的全局变量、局部变量和行号信息)对于调试不是始终必需的,尽管它们对于更深入的调试会话非常有用。它们被称为“专用符号”

包含专用符号和公共符号二者的符号文件称为“完全符号文件”。仅包含公共符号的符号文件称为“剥离符号文件”。

BinPlace 可以创建剥离符号文件。它通过创建仅包含公共符号,并移除(“剥离”)专用符号的新符号文件来实现此目的。在使用最常用的 BinPlace 选项时 (-a -x -s -n),剥离符号文件被置于 -s 开关后列出的目录中,而完全符号文件将置于 -n 开关后列出的目录中。

当 BinPlace 剥离符号文件时,会为剥离和完全版本的文件提供相同的签名和其他标识信息。这允许你使用任意调试版本。

注意   当符号文件与可执行文件位于相同的目录,且在 BinPlace 命令行上指定了“可执行”文件(带有适当选项)的名称时,BinPlace 将专用符号从符号文件中剥离。不应指定符号文件本身的名称,这样做会导致 BinPlace 移走文件而不会修改文件。

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

在将驱动程序提交到 Windows 硬件认证计划的情况下,如不希望与 Microsoft 共享专用符号,可以提交剥离符号文件。已经过 BinPlace 剥离处理的符号文件不会暴露驱动程序的体系结构的任何部分,这部分通常被视为是机密信息。有关详细信息,请参阅 Windows 硬件认证计划

 

 

显示:
© 2014 Microsoft