2008-10-15 5 views

ответ

65

Вы можете использовать IDA Pro по Hex-Rays. Обычно вы не получите хороший C++ из двоичного файла, если вы не компилируете его в отладочную информацию. Приготовьтесь провести лот ручного труда, изменяющего код.

Если вы не разделили двоичные файлы, есть надежда, поскольку IDA Pro может создавать C-подобный код для работы. Обычно это очень грубо, хотя, по крайней мере, когда я использовал его пару лет назад.

+17

Чтобы уточнить, IDA предоставит только демонтаж. Там есть надстройка, называемая Hex-Rays, которая будет декомпилировать остальную часть пути в исходный код C/C++, насколько это возможно. – davenpcj 2012-05-05 12:55:10

+1

К моему чтению документов, шестнадцатеричные лучи только выходы C любят псевдокод. Не то чтобы это бесполезно для декомпиляции C++, вам просто нужно немного узнать, как компиляторы преобразуют структуры C++. – 2013-04-11 05:32:02

+0

Чтобы уточнить еще раз, дизассемблер - это самая декомпиляционная система, в которой Hex-Rays переведет ASM на C++. ASM может быть переведен на любой язык программирования с работой, поскольку все программы могут работать как ASM – 2014-04-12 12:08:30

17

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

18

информация отбрасывается в процессе компиляции. Даже если декомпилятор может создать логический эквивалентный код с классами и всем (что, вероятно, не может), самодокументируемая часть отсутствует в оптимизированном коде выпуска. Нет имен переменных, нет имен подпрограмм, нет имен классов - только адреса.

3

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

n.b. Ясно, что если это огромный продукт, то это может не стоить времени.

5

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