关于 Windows 中带有调试信息的可执行文件

Posted

技术标签:

【中文标题】关于 Windows 中带有调试信息的可执行文件【英文标题】:About executable with debug information in windows 【发布时间】:2010-09-21 04:20:14 【问题描述】:

PointerToSymbolTable

COFF 符号的文件偏移量 表,如果没有 COFF 符号表,则为零 存在。 PE图像为0 文件,因为调试信息是 折旧。

为什么它说调试信息对于 PE 映像已贬值? AFIAK,windows中的可执行文件也可以携带调试信息,是不是这样?

【问题讨论】:

【参考方案1】:

正如它所说的 PE 映像的调试信息已被贬低,调试符号不再直接嵌入到 PE 中。而是存储在包含调试信息的 .PDB 文件中。该文件的格式未记录,因此您只能通过调用 DbgHelp.dll 中的 API 来从该文件中提取信息。

【讨论】:

【参考方案2】:

请注意您是从哪里读到的,但 MSDN 中的 this page 没有这样的警告。

您需要记住,MSDN 在某种程度上是特定于 Microsoft 的。在 Microsoft 世界中,coff 调试信息早已被 .PDB 文件取代,因此当您使用 Microsoft 编译器时,几乎不会在可执行映像中获得符号inside(因此PointerToSymbolTable 将始终为 0)。

仍然有使用嵌入式 COFF 数据的程序(例如 MinGW,我相信)。

【讨论】:

PE 中调试符号的结构名称是什么?

以上是关于关于 Windows 中带有调试信息的可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

关于QtCreator中三种不同编译版本 debugreleaseprofile 的区别

是否可以调试由没有 gdb 标志编译的可执行文件生成的核心文件?

逆向调试入门-了解PE结构文件

Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件

由于调试符号,巨大的可执行文件,为啥?

使用 otest 调试测试时,如何将我的可执行文件链接到我的测试包?