符号文件系统

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

当前符号文件系统

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

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

旧符号文件系统

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

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

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

在旧符号文件系统中,双文件排列和三文件排列都包含相同的可执行代码和相同的符号。 该程序可以在任何一种排列下运行和调试。 然而,三文件排列加快了执行速度,因为可执行文件较小。

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

BinPlace 还可以从旧符号文件系统中的文件中剥离专用符号信息,但前提是它也在拆分文件(换句话说,只有当它将文件从双文件排列更改为三文件排列时)。 BinPlace 无法将专用符号从旧符号文件系统中的文件中剥离出来,并将其保留在双文件排列中。 如果文件已经是三文件排列,BinPlace 将不会执行任何剥离;实际上,如果可执行文件在 BinPlace 命令行上命名,它甚至不会移动符号文件。 有关详细信息,请参阅公共符号和专用符号