Чи є декомпілятор C ++? [зачинено]


116

У мене є програма, в якій я втратив вихідний код C ++. Чи є якісь хороші C ++ декомпілятори там?

Я вже наткнувся на Бумеранг .


objdumpдля Linux
Stypox

1
cutter.re для чудового gui та чудового вбудованого декомпілятора
Misiur

Відповіді:


80

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

Якщо ви не знімали двійкові файли, є деяка надія, оскільки IDA Pro може створити подібний C-код для роботи. Зазвичай це дуже грубо, хоча б тоді, коли я ним користувався пару років тому.


26
Для уточнення IDA дасть лише розбирання. До цього додатка під назвою Hex-Rays можна декомпілювати решту шляху до джерела C / C ++, наскільки це можливо.
davenpcj

2
На моє читання документів, гекса-випромінювання виводить лише С, як псевдо-код. Не те, що робить його марним для декомпіляції C ++, потрібно просто трохи знати про те, як компілятори перетворюють структури C ++.
Майкл Андерсон

Для того, щоб уточнити деякі більш, Демонтажні є самим ви можете декомпілювати з Hex-Rays переведе ASM на C ++ ASM може бути переведена на будь-яку мову програмування з роботи , так як всі програми можуть працювати як ASM
Barkermn01

4
SNOWMAN - хороший безкоштовний c ++ декомпілятор
Інга,

2
+1 для Сніговика, але, як зазначали інші, навіть простий привіт, Світ стає практично нечитабельним, коли він декламується.
bdetweiler

25

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


25
"душа" програми пішла, просто порожня оболонка її колишнього "..."
Даршан Чадхарі

21

Так, але жодному з них не вдасться створити читабельний код, котрий вартує зусиль. Ви витратите більше часу, намагаючись прочитати декомпільоване джерело з асемблерними блоками всередині, ніж переписувати старий додаток з нуля.


6

Я не бачив жодних декомпіляторів, які генерують код C ++. Я бачив декілька експериментальних, які роблять обґрунтовану спробу генерування коду С, але вони, як правило, залежать від відповідності шаблонам генерації коду певного компілятора (це, можливо, змінилося, минуло деякий час, коли я востаннє вивчив це ). Звичайно, будь-яка символічна інформація вже не буде. Google для "декомпілятора".


4

Залежно від того, наскільки великий і наскільки добре написаний оригінальний код, можливо, варто почати заново на своїй улюбленій мові (яка все ще може бути C ++) та вчитися на помилках, допущених в останній версії. Хіба хтось колись не говорив про те, щоб написати один, щоб викинути?

nb Зрозуміло, якщо це величезний продукт, то, можливо, це не варто того часу.



24
Джоел - чудовий оглядач, але часом неправильно. І тоді бувають випадки, коли він неправильно цитує. Як і тут, оскільки питання зосереджується на втраті вихідного коду. Стаття Joels пояснює, чому вихідний код є цінним.
MSalters

5
Хіба хтось колись не говорив про те, щоб написати один, щоб викинути? Так, і він передумав davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] n 1975 року, я порадив програмістам "відкинути першу версію", а потім створити другу один. До випуску двадцятиріччя я зрозумів, що постійна інкрементальна ітерація - це далеко підхід
ta.speot.is
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.