Можете ли вы получить исходный код из скомпилированного отладочного файла? - PullRequest
4 голосов
/ 26 января 2011

Я копался и нашел исполняемый файл для чего-то, что я написал в Visual C ++ 6.0 около 8 лет назад. Я никогда не копировал исходный код, но думаю, что всегда компилировал все в режиме отладки. Я также смутно помню, что где-то слышал, что «вы не можете декомпилировать исполняемый файл в исходный код, если у вас нет отладочных символов вашего компилятора или чего-то подобного». Код будет иметь сентиментальное значение, но я не считаю его критически важным.

Это фон; вот вопросы:

  1. Как проверить, скомпилирован ли исполняемый файл в режиме отладки или нет?
  2. Если это так, какая информация поступает с исполняемым файлом режима отладки?
  3. Могу ли я получить полный исходный код? В противном случае, могу ли я получить существенное улучшение при декомпиляции по сравнению с релизной версией? Если да, то как?

Спасибо

- Майкл Бердж

Ответы [ 3 ]

2 голосов
/ 26 января 2011
  1. Я не верю, что есть флаг, хотя вы можете найти что-то, используя PEDUMP, который будет выгружать форматы файлов COFF (Windows EXE и DLL). Вы можете определить, был ли исполняемый файл скомпилирован для отладки достаточно быстро, запустив Dependecy Walker и проверив, ссылается ли ваш EXE-файл на какие-либо библиотеки отладки (с суффиксом D, например MSVCRT5D.DLL).

    FYI в VC6 Debug и Release - это простые именованные сборки, а не режимы, скажем так, каждая сборка представляет собой набор настроек компилятора и компоновщика. EXE - это просто код, отладочные файлы обычно не оптимизированы, что упрощает использование отладчика (в отличие от отладки оптимизированного кода). Таким образом, вы можете скомпилировать двоичный файл Release с символами отладки, который иногда полезен для отслеживания оптимизированных ошибок кода.

  2. Файлы отладки EXE и DLL не содержали никакой информации об отладке, но вместо этого имели файл PDB сопутствующего файла, который находился в той же папке и содержал всю информацию об символах отладки, созданную во время компиляции.

  3. Нет, источник является источником и не скомпилирован в файл символов или исполняемые файлы. Есть несколько удивительных декомпиляторов, которые могут создавать достойные версии C вашего кода, но они удивительны только тем, насколько хорош C, а не тем, насколько хорошо они могут воссоздать ваш исходный код.

0 голосов
/ 26 января 2011

Боюсь, что в Visual Studio вы не сможете, поскольку исполняемый файл отладки не содержит исходный код.Visual Studio генерирует файлы pdb, которые содержат только сопоставление между двоичным файлом и исходными именами файлов и номерами строк, но вам все равно нужен исходный код.Это может отличаться от gcc, который, я думаю, интегрирует сам источник внутри двоичных файлов.

0 голосов
/ 26 января 2011

Я думаю, что многие дизассемблеры могут показать исходный код, если двоичный файл скомпилирован в режиме отладки.Например, я использую OllyDBG, и у него есть возможность показать источник, хотя я никогда не пробовал.

...