Mam program, w którym zgubiłem kod źródłowy C ++. Czy są tam jakieś dobre dekompilatory C ++?
Natknąłem się już na Boomerang .
Mam program, w którym zgubiłem kod źródłowy C ++. Czy są tam jakieś dobre dekompilatory C ++?
Natknąłem się już na Boomerang .
Odpowiedzi:
Możesz użyć IDA Pro firmy Hex-Rays . Zwykle nie uzyskasz dobrego C ++ z pliku binarnego, chyba że wkompilujesz informacje debugowania. Przygotuj się na dużo pracy fizycznej przy odwracaniu kodu.
Jeśli nie usunąłeś plików binarnych, jest pewna nadzieja, ponieważ IDA Pro może stworzyć kod podobny do C, z którym będziesz mógł pracować. Zwykle jest to jednak bardzo szorstkie, przynajmniej gdy używałem go kilka lat temu.
informacje są odrzucane w procesie kompilacji. Nawet jeśli dekompilator mógłby stworzyć logiczny równoważny kod z klasami i wszystkim (prawdopodobnie nie może), część samodokumentująca się zniknęła w zoptymalizowanym kodzie wydania. Żadnych nazw zmiennych, nazw procedur, nazw klas - tylko adresy.
Tak, ale żadnemu z nich nie uda się stworzyć wystarczająco czytelnego kodu, aby był wart wysiłku. Spędzisz więcej czasu próbując odczytać zdekompilowane źródło z blokami asemblera w środku, niż przepisując swoją starą aplikację od zera.
Nie widziałem żadnych dekompilatorów, które generują kod C ++. Widziałem kilka eksperymentalnych, które podejmowały rozsądną próbę wygenerowania kodu w C, ale były one zwykle zależne od dopasowania wzorców generowania kodu określonego kompilatora (to mogło się zmienić, minęło trochę czasu, odkąd ostatnio się temu przyjrzałem ). Oczywiście znikną wszelkie symboliczne informacje. Google for „decompiler”.
W zależności od tego, jak duży i dobrze napisany był oryginalny kod, warto zacząć od nowa w swoim ulubionym języku (którym nadal może być C ++) i uczyć się na błędach popełnionych w ostatniej wersji. Czy ktoś kiedyś nie powiedział o napisaniu jednego, żeby go wyrzucić?
Uwaga Oczywiście, jeśli jest to ogromny produkt, może nie być warty czasu.
objdump
dla systemu Linux