符号文件系统

有两个常见的符号文件系统。 在本文档中,这些系统称为当前系统和旧系统

当前符号文件系统

在当前系统中,始终有两个文件:可执行文件和 .pdb 文件。 .pdb 文件包含所有符号。 可执行文件包含指向 .pdb 文件的指针。

如果 .pdb 符号文件包含私有符号,则 BinPlace 可以去除此信息并生成去除的符号文件。 有关详细信息 ,请参阅公共符号和专用符号

旧符号文件系统

在旧系统中,可执行文件和符号文件可以按两种不同的方式排列:

  • 可执行文件和 .pdb 文件。 在此排列方式中,大多数符号信息都位于 .pdb 文件中。 其余符号信息包含在可执行文件中。 可执行文件还包含指向 .pdb 文件的指针。

  • 可执行文件、.pdb 文件和 .dbg 文件。 .pdb 文件与双文件排列方式相同:它包含大部分符号。 符号信息的其余部分位于 .dbg 文件中。 可执行文件中没有符号信息。 可执行文件包含指向 .dbg 文件的指针,.dbg 文件包含指向 .pdb 文件的指针。

在旧符号文件系统中,双文件排列和三文件排列都包含相同的可执行代码和相同的符号。 程序可以运行,并且可以采用任一排列方式进行调试。 但是,三个文件排列会加快执行速度,因为可执行文件较小。

如果有使用双文件排列中的旧符号文件系统生成的二进制文件,BinPlace 可以将其转换为三文件排列。 换句话说,BinPlace 可以将可执行文件“拆分”为无符号可执行文件和包含可执行文件中的符号的新 .dbg 文件。

BinPlace 还可以从旧符号文件系统中的文件中删除私有符号信息,但前提是它也拆分 (的文件,即仅当将文件从双文件排列更改为三文件排列) 。 BinPlace 无法从旧符号文件系统中的文件中删除私有符号,并将它们保留为双文件排列。 如果文件已采用三文件排列方式,BinPlace 将不会执行任何剥离:如果可执行文件在 BinPlace 命令行上命名,则它甚至不会移动符号文件。 有关详细信息 ,请参阅公共符号和专用符号