У мене є програма, в якій я втратив вихідний код C ++. Чи є якісь хороші C ++ декомпілятори там?
Я вже наткнувся на Бумеранг .
У мене є програма, в якій я втратив вихідний код C ++. Чи є якісь хороші C ++ декомпілятори там?
Я вже наткнувся на Бумеранг .
Відповіді:
Ви можете використовувати IDA Pro від Hex-Rays . Зазвичай ви не отримаєте хороший C ++ з бінарного файлу, якщо ви не зібрали інформацію про налагодження. Підготуйтеся витратити багато ручної праці, перевернувши код.
Якщо ви не знімали двійкові файли, є деяка надія, оскільки IDA Pro може створити подібний C-код для роботи. Зазвичай це дуже грубо, хоча б тоді, коли я ним користувався пару років тому.
інформація відкидається в процесі складання. Навіть якщо декомпілятор міг би створити логічний еквівалентний код з класами і всім (він, мабуть, не може), частина самодокументування залишається в оптимізованому коді випуску. Без імен змінних, без імен рутини, без імен класів - лише адреси.
Так, але жодному з них не вдасться створити читабельний код, котрий вартує зусиль. Ви витратите більше часу, намагаючись прочитати декомпільоване джерело з асемблерними блоками всередині, ніж переписувати старий додаток з нуля.
Я не бачив жодних декомпіляторів, які генерують код C ++. Я бачив декілька експериментальних, які роблять обґрунтовану спробу генерування коду С, але вони, як правило, залежать від відповідності шаблонам генерації коду певного компілятора (це, можливо, змінилося, минуло деякий час, коли я востаннє вивчив це ). Звичайно, будь-яка символічна інформація вже не буде. Google для "декомпілятора".
Залежно від того, наскільки великий і наскільки добре написаний оригінальний код, можливо, варто почати заново на своїй улюбленій мові (яка все ще може бути C ++) та вчитися на помилках, допущених в останній версії. Хіба хтось колись не говорив про те, щоб написати один, щоб викинути?
nb Зрозуміло, якщо це величезний продукт, то, можливо, це не варто того часу.
objdump
для Linux