我正在挖掘并发现了大约8年前我在Visual C ++ 6.0中编写的可执行文件。我从来没有备份源代码,但我想我总是在调试模式下编译所有内容。我还隐约记得在某个地方听说过,除非你有编译器的调试符号或其他东西,否则你不能将可执行文件反编译成源代码。"代码会有感情价值,但我检索它并不是关键任务。
这是背景;以下是问题:
谢谢,
- Michael Burge
答案 0 :(得分:2)
我不相信有一面旗帜虽然您可能会发现使用PEDUMP会丢弃COFF文件格式(Windows EXE和DLL)。您可以通过运行Dependecy Walker并查看您的EXE是否链接到任何调试DLL(以D为后缀,例如MSVCRT5D.DLL)来推断是否可以快速编译可执行文件以进行调试。
VC6中的FYI调试和发布是简单命名的构建,而不是每个模式,每个构建编译器和链接器设置的集合。 EXE只是代码,调试exes通常没有经过优化,这使得使用调试器很容易(与调试优化代码相比)。因此,您可以使用Debug Symbols编译Release二进制文件,这有时可用于跟踪优化的代码错误。
调试EXE和DLL不包含任何调试信息,而是有一个sidecar PDB文件,它位于同一文件夹中,包含编译期间生成的所有调试符号信息。
不,源是源,不会编译到符号文件或可执行文件中。有一些令人惊奇的反编译器可以重新生成你代码的C版本,但它们只是在C的好坏方面才是惊人的,而不是它们重建你的源的能力。
答案 1 :(得分:0)
使用Visual Studio,我担心你不能,因为调试可执行文件不包含源代码。 Visual Studio生成的pdb文件仅包含二进制文件与源文件名和行号之间的映射,但您仍需要使用它们的源代码。这可能与gcc不同,我认为将源本身集成在二进制文件中。
答案 2 :(得分:-2)
我认为如果在调试模式下编译二进制文件,许多反汇编程序可以显示源代码。例如,我使用OllyDBG并且它有一个显示源的选项,尽管我从未尝试过。