2010-06-18 3 views
6

У меня есть приложение на C++, скомпилированное в отладке (с использованием MinGW и Qt), но я потерял некоторые важные изменения, потому что кто-то из моей команды забыл внести изменения в диспетчер управления источником и перезаписал исходный код другими изменениями.Могу ли я восстановить исходный код C++ из двоичных файлов отладки?

Когда я запускаю программу в отладке (в Qt Creator), я могу установить точку останова в main, а затем увидеть исходный код.

Есть ли способ восстановить все исходные файлы, потерянные с использованием только двоичных файлов отладки? Либо вручную, либо автоматически.

Спасибо!

+4

Вы не можете потерять свой исходный код, чтобы кто-то забыл совершить его изменения. –

+1

@Hans Вы можете потерять промежуточные изменения «кто-то». Хотя это спорный вопрос, почему вы хотели бы их. – 2010-06-18 18:05:02

+0

Точно Ганс. В какой-то момент нас устраивало приложение, которое программист дал нам (двоичные файлы отладки). Мы ожидали, что он выполнит свой код, но он этого не сделал. Теперь, две недели спустя, программист «улучшил» свой код, далекий от звездных изменений (читай: дерьмовый код). К сожалению, у нас нет резервной копии его компьютера. У нас есть только двоичные файлы ... –

ответ

10

Когда я запускаю программу в отладке (в Qt Creator), я могу установить точку останова в main, а затем увидеть исходный код.

Действительно? Узнайте, откуда отправляется ваш отладчик, и скопируйте его там.

Скорее всего, ваш отладчик просто захватывает файл в вашей системе с тем же именем/путем, что и исходное имя файла (возможно, более поздняя версия или старая версия и т. Д.), И все, что просто происходит, выстраивается в очередь.

Вы не можете по-настоящему восстановить исходную исходную форму скомпилированного двоичного файла, потому что преобразование из источника C++ в скомпилированный двоичный файл не является отношением от 1 до 1. Существует много (бесконечно ...) разных исходных файлов, которые будут скомпилированы в один и тот же двоичный файл. Невозможно узнать, смотря на двоичный код, как выглядел исходный источник.

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

+0

Вы правы. Я переименовал каталог исходного кода проекта на моем собственном компьютере, и теперь вижу только код сборки. Благодарю. –

+0

@TerryMahaffey: «Есть инструменты, которые могут сгенерировать что-то, что напоминает исходный файл на C++», можно ли их получить? – user2284570

0

Мне недавно пришлось перестроить скомпилированную программу MSVC, декомпилировав ее на ассемблер - никакой информации об отладке, источник даже не добрался до контроля версий. Единственное, что спасло меня от начала с нуля, - это предыдущий разработчик, использующий пример приложения для API в качестве базы для этого нового приложения.

Если у вас есть символы отладки, вы можете хотя бы надеяться получить имена методов.

Я нашел rec22 (recstudio.exe), чтобы быть моим лучшим вариантом для декомпиляции (для бесплатной загрузки) и выручить IDAPro hexrays, казалось, что это могло бы быть лучше (но не мог позволить себе купить)

0

Если к «Когда я запускаю программу в отладке (в Qt Creator), я могу установить точку останова в главном, а затем увидеть исходный код». вы на самом деле имеете в виду, что внутри отладчика вы можете увидеть более старую версию кода, а это значит, что все еще есть копия источника, лежащего где-то, что отладчик способен забрать. Вы должны иметь возможность (худший случай) судить отладчика, чтобы узнать, где находятся файлы.

Если это не то, что вы имеете в виду, лучшее, что я знаю, это попытка сделать какую-то разборку с помощью отладчика. В зависимости от сложности изменений может быть возможным вывести исходный код из сборки.

В целом даже двоичные файлы отладки не предназначены для воссоздания исходного источника: для этого и предназначен источник. У них есть карты таблиц символов и команд-> строк, которые могут помочь.

-2

Используйте программу strings, чтобы извлечь все байты ASCII, а затем переставить их.

1

Я думаю, что есть небольшая вероятность, что вы можете восстановить исходный код, но не из самого двоичного файла: если вы действительно, действительно отчаянный, вы можете использовать приложение поиска (например, агент Ransack) и искать весь диск для строки шаблоны, которые, как вы знаете, существуют в исходном коде. В частности, выполните поиск в вашем файле подкачки (pagefile.sys), если у вас его есть - может быть, есть шанс, что он где-то там похоронен.

Я пробовал этот метод один раз, когда был действительно в отчаянии, но моя ситуация была немного иной и более благоприятной для «поиска и восстановления», потому что я потерял ее, когда каким-то образом сбой IDE и весь исходный файл потеряли (!!!! неприятный сюрприз !!!)