У меня есть программа, в которой я потерял исходный код C ++. Есть ли хорошие декомпиляторы C ++?
Я уже наткнулся на Бумеранг .
У меня есть программа, в которой я потерял исходный код C ++. Есть ли хорошие декомпиляторы C ++?
Я уже наткнулся на Бумеранг .
Ответы:
Вы можете использовать IDA Pro от Hex-Rays . Обычно вы не получите хорошего C ++ из двоичного кода, если вы не скомпилируете отладочную информацию. Приготовьтесь потратить много ручного труда на изменение кода.
Если вы не удалили двоичные файлы, есть некоторая надежда, так как IDA Pro может создавать для вас C-подобный код для работы. Обычно он очень грубый, по крайней мере, когда я использовал его пару лет назад.
информация отбрасывается в процессе компиляции. Даже если декомпилятор может создать логический эквивалентный код с классами и всем остальным (вероятно, не может), часть самодокументирования отсутствует в оптимизированном коде выпуска. Ни имен переменных, ни стандартных имен, ни имен классов - только адреса.
Да, но ни одному из них не удастся создать достаточно читаемый код, чтобы стоить затраченных усилий. Вы потратите больше времени, пытаясь прочитать декомпилированный исходный код с блоками ассемблера внутри, чем переписывая свое старое приложение с нуля.
Я не видел декомпиляторов, генерирующих код C ++. Я видел несколько экспериментальных, которые предпринимали разумные попытки сгенерировать код C, но они, как правило, зависели от сопоставления шаблонов генерации кода конкретного компилятора (это могло измениться, прошло некоторое время с тех пор, как я в последний раз изучал этот ). Конечно, всякая символическая информация исчезнет. Гугл для "декомпилятора".
В зависимости от того, насколько велик и насколько хорошо написан исходный код, возможно, стоит начать заново с вашего любимого языка (которым может оставаться C ++) и извлечь уроки из ошибок, допущенных в последней версии. Разве кто-то однажды не сказал о том, чтобы написать одну, которую нужно выбросить?
nb Очевидно, что если это огромный продукт, то, возможно, оно того не стоит.
objdump
для Linux