2008-10-15 15 views

Odpowiedz

65

Możesz użyć IDA Pro przez Hex-Rays. Zazwyczaj nie otrzymasz dobrego C++ z pliku binarnego, chyba że skompilowałeś informacje debugowania. Przygotuj się na wydanie pracy pracy ręcznej odwracając kod.

Jeśli pliki binarne nie zostały usunięte, istnieje pewna nadzieja, ponieważ program IDA Pro może wytworzyć kod podobny do C, z którym można pracować. Zwykle jest to bardzo trudne, przynajmniej gdy korzystałem z niego kilka lat temu.

+17

Aby wyjaśnić, IDA da tylko demontaż. Jest tam dodatkowy dodatek o nazwie Hex-Rays, który będzie dekompilował resztę drogi do źródła C/C++, w takim stopniu, w jakim jest to możliwe. – davenpcj

+1

Do mojego czytania dokumentów, promienie szesnastkowe wyprowadzają tylko C jak pseudokod. Nie oznacza to, że jest on bezużyteczny przy dekompilacji C++, wystarczy wiedzieć, w jaki sposób kompilatory konwertują struktury C++. –

+0

Aby wyjaśnić więcej, Demontaż jest najbardziej, co można dekompilować z Hex-Rays będzie tłumaczyć ASM na C++ ASM można przetłumaczyć na dowolny język programowania z pracy, jak wszystkie programy mogą działać jako ASM –

17

Tak, ale żadnemu z nich nie uda się wytworzyć wystarczająco czytelnego kodu, by ten wysiłek był warty. Spędzisz więcej czasu, próbując odczytać zdekompilowane źródło z blokami asemblera wewnątrz, zamiast przepisywania starej aplikacji od zera.

18

informacje są odrzucane podczas kompilacji. Nawet jeśli dekompilator mógłby wytworzyć logiczny równoważny kod z klasami i wszystkim (prawdopodobnie nie może), część samo-dokumentująca zniknęła w zoptymalizowanym kodzie zwolnienia. Bez nazw zmiennych, bez nazw rutynowych, bez nazw klas - tylko adresy.

+2

"Dusza" programu zniknęła, po prostu pusta skorupa jego dawnego ja ... " –

3

W zależności od tego jak duży i jak dobrze napisany był oryginalny kod, warto zacząć od nowa w swoim ulubionym języku (którym może być jeszcze C++) i uczyć się na błędach popełnionych w ostatniej wersji. Czy ktoś nie powiedział kiedyś o napisaniu do wyrzucenia?

n.b. Oczywiście, jeśli jest to ogromny produkt, może nie być warta czasu.

+0

http://www.joelonsoftware.com/articles/fog0000000069.html –

+21

Joel jest świetnym felietonistą, ale czasami źle A potem są chwile, kiedy cytowany jest nieprawidłowo, tak jak tutaj, ponieważ pytanie koncentruje się wokół utraty kodu źródłowego. Artykuł Joelsa wyjaśnia, dlaczego kod źródłowy jest cenny – MSalters

+4

* Czy ktoś nie powiedział kiedyś o napisaniu go do wyrzucenia? * Tak, i zmienił zdanie http://www.davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away * [I] n 1975, doradziłem programistom "rzucić pierwszą wersję dalej, "następnie zbuduj drugą." W XX-wiecznym wydaniu zdałem sobie sprawę, że stała iteracja inkrementalna to zdecydowanie rozsądniejsze podejście * –

5

Nie widziałem żadnych dekompilatorów generujących kod C++. Widziałem kilka eksperymentalnych, które podjęły uzasadnioną próbę wygenerowania kodu C, ale zwykle zależały od dopasowania wzorców generowania kodu określonego kompilatora (co mogło się zmienić, minęło trochę czasu, odkąd ostatni raz zaglądałem do tego). Oczywiście wszelkie symboliczne informacje znikną. Google dla "dekompilatora".