指针到符号表:
COFF 符号表的文件偏移量,如果不存在 COFF 符号表,则为零。PE 映像文件为 0,因为调试信息已被贬低。
为什么它说 PE 映像的调试信息已贬值?AFIAK,windows中的可执行文件也可以携带调试信息,不是这样吗?
指针到符号表:
COFF 符号表的文件偏移量,如果不存在 COFF 符号表,则为零。PE 映像文件为 0,因为调试信息已被贬低。
为什么它说 PE 映像的调试信息已贬值?AFIAK,windows中的可执行文件也可以携带调试信息,不是这样吗?
正如它所说的 PE 映像的调试信息已被贬低,调试符号不再直接嵌入到 PE 中。而是存储在包含调试信息的 .PDB 文件中。该文件的格式未记录,因此您只能通过调用 DbgHelp.dll 中的 API 从该文件中提取信息。
请注意您是从哪里读到的,但是MSDN 中的这个页面没有这样的警告。
您需要记住,MSDN 在某种程度上是特定于 Microsoft 的。在 Microsoft 世界中,coff 调试信息早已被 .PDB 文件取代,因此当您使用 Microsoft 编译器时,您几乎永远不会在可执行映像中获得符号(因此PointerToSymbolTable
始终为 0)。
仍然有使用嵌入式 COFF 数据的程序(例如 MinGW,我相信)。