Pytanie:
Dekompilator Java Open Source, który nie zawiesza się w dużych projektach, rozumie zaawansowane koncepcje Java
Nicolas Raoul
2014-02-05 06:38:56 UTC
view on stackexchange narkive permalink

Dekompilator Java zamienia plik .class z powrotem w plik .java . Chociaż zdekompilowany kod nie jest doskonały (brak komentarzy, czasami zaciemnione nazwy itp.), Może być przydatny podczas zawodów hakerskich lub do uwolnienia danych zablokowanych przez zastrzeżone oprogramowanie lub do zaspokojenia ciekawości.

kilka dekompilatorów Open Source, ale nie jestem z nich zadowolony, ponieważ te, które próbowałem, powodowały awarie w dużych projektach Java, tworzyły nieoptymalne nazwy zmiennych lub używały formatowania kodu, które nie jest zgodne z Kodem Java Konwencje.

Dekompilator powinien być w stanie zrozumieć i przejrzyście pokazać wszystkie najnowsze koncepcje (na przykład typy generyczne).

Używam jad razem z wtyczką eclipse jadclipse. Pomaga uzyskać wrażenie o tym, co się dzieje i nie powinno zależeć od rozmiaru projektu, ponieważ dekompiluje tylko jedną klasę.
@JensPiegsa: jad nie jest oprogramowaniem typu open source i nie jest utrzymywane pomimo błędów.
Proszę załączyć listę dekompilatorów, które rozważałeś i dlaczego nie są one aktualne.
Dwa odpowiedzi:
Jayan
2014-03-08 12:33:17 UTC
view on stackexchange narkive permalink

Użyłem CFR i wynik wygląda dobrze. Rozumie typy ogólne, formatowanie jest czyste. Nie jestem pewien, czy nazewnictwo (zmienna lokalna) może być lepsze. Oto przykład, który pokazuje problem z nazewnictwem.

Zobacz dane wyjściowe z java.util.ArrayDequeue (

  private void doubleCapacity () {int n; assert (this.head == this.tail); int n2 = this.head; int n3 = this.elements.length; int n4 = n3 - n2; if ((n = n3 << 1) < 0) {throw new IllegalStateException ("Przepraszamy, deque too big ");} Object [] arrobject = new Object [n]; System.arraycopy (this.elements, n2, arrobject, 0, n4); System.arraycopy (this.elements, 0, arrobject, n4, n2 ); this.elements = arrobject; this.head = 0; this.tail = n3;}  

Porównaj to z oryginalnym

  private void doubleCapacity ( ) {assert head == tail; int p = head; int n = elements.length; int r = n - p; // liczba elementów na prawo od p int newCapacity = n << 1; if (newCapacity < 0) rzucić nowe IllegalStateException („Przepraszamy, deque za duży”); Object [] a = new Object [newCapacity]; System.arraycopy (elementy, p, a, 0, r); System.arraycopy (elementy, 0, a, r, p); elementy = (E []) a; głowa = 0; tail = n;}  

Uzyskanie nazwy opartej na kontekście będzie poza zakresem dla większości dekompilatorów.

Autor ma link do swojego projektu przyjaciół, procyon , opensource. Ma własną stronę porównawczą. Ze strony ...

Dekompilator Procyon obsługuje ulepszenia języka z Java 5 i innych, których nie robi większość innych dekompilatorów. Doskonale sprawdza się również w obszarach, w których inni nie radzą sobie. Szczególnie Procyon radzi sobie dobrze z:

  Deklaracje wyliczenia Instrukcje przełącznika liczb i ciągów (dotychczas testowane tylko z javac 1.7) Klasy lokalne (zarówno anonimowe, jak i nazwane) Adnotacje
Lambdy Java 8 i odwołania do metod (tj. Operator ::).  
Niestety CFR nie jest open source: - / Zobacz http://www.benf.org/other/cfr/faq.html "* Nie zamierzam opublikować źródła, dopóki nie będzie trochę bardziej dopracowane *". Tylko plik binarny jest objęty licencją MIT, więc nie jest to oprogramowanie typu open source.
Źródło jest teraz opublikowane [na GitHub] (https://github.com/leibnitz27/cfr).
Irgendw Pointer
2014-02-08 17:02:34 UTC
view on stackexchange narkive permalink

Użyłem dekompilatora Java autorstwa Emmanuela Dupuya. Dla mnie to dobry dekompilator plików jar. Mam kod źródłowy. Użyłem wersji GUI systemu Windows do zdekompilowania pliku jar.

  • Łatwy w użyciu
  • Funkcja nawigacji i wyszukiwania
  • pokaż drzewo projektu jar

Dla mnie to było dobre rozwiązanie i jest bardzo szybkie.

Dzięki za wysiłek, ale nie jest to oprogramowanie typu open source. https://en.wikipedia.org/wiki/Java_Decompiler
Och, przepraszam, widziałem twoje pytanie i nie pomyślałem, że potrzebujesz wersji open source.
@NicolasRaoul Po co potrzeba oprogramowania open source, jeśli masz dekompilator? :)


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...