Я могу восстановить исходный код C++ от двоичных файлов отладки?

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

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

Существует ли способ восстановить потерянное использование всего исходного файла только двоичные файлы отладки? Или вручную или автоматически.

Спасибо!

6
задан Etienne Savard 18 June 2010 в 18:03
поделиться

5 ответов

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

В самом деле? Узнайте, откуда ваш отладчик берет исходный код, и скопируйте его оттуда.

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

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

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

10
ответ дан 16 December 2019 в 21:34
поделиться

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

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

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

0
ответ дан 16 December 2019 в 21:34
поделиться

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

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

1
ответ дан 16 December 2019 в 21:34
поделиться

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

-3
ответ дан 16 December 2019 в 21:34
поделиться

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

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

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

0
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: