Mic*_*rge 5 c++ decompiling debug-symbols backup-strategies visual-c++
大约 8 年前,我四处挖掘并找到了我在 Visual C++ 6.0 中编写的内容的可执行文件。我从不备份源代码,但我想我总是在调试模式下编译所有内容。我还依稀记得在某处听说过“除非您拥有编译器的调试符号或其他东西,否则您无法将可执行文件反编译为源代码”。该代码具有情感价值,但我检索它并不是关键任务。
这就是背景;以下是问题:
谢谢,
——迈克尔·伯格
我不相信有一个标志,尽管您可能会通过使用 PEDUMP 找到一些东西,它会转储 COFF 文件格式(Windows EXE 和 DLL)。通过运行Dependecy Walker并查看 EXE 是否链接到任何调试 DLL(后缀为 D,例如 MSVCRT5D.DLL),您可以相当快地推断出可执行文件是否已编译用于调试。
仅供参考,VC6 调试和发布是简单的命名构建,而不是模式,每个构建都是编译器和链接器设置的集合。EXE 只是代码,调试 exe 通常没有经过优化,这使得使用调试器变得容易(与调试优化代码相比)。因此,您可以使用调试符号编译发布二进制文件,这有时对于跟踪优化的代码错误很有用。
调试 EXE 和 DLL 不包含任何调试信息,而是有一个位于同一文件夹中的 sidecar PDB 文件,并包含编译期间生成的所有调试符号信息。
不,源代码是源代码,没有编译到符号文件或可执行文件中。有一些令人惊叹的反编译器可以重新生成代码的不错的 C 版本,但它们的惊人之处仅在于 C 有多好,而不是它们可以如何很好地重新创建源代码。