Dekompilacja klas w Javie

1. Wstęp

W tym samouczku omówimy dekompilację klas Java. Gdy kod źródłowy nie jest dostępny, dekompilacja klas Java pomaga debugować i zrozumieć zachowanie kodu źródłowego.

Rzućmy okiem na różne dostępne opcje.

2. Dekompilacja w IDE

Ponieważ większość programowania odbywa się w zintegrowanym środowisku programistycznym (IDE), ma sens, aby dekompilacja odbywała się również w IDE.

Aby uzyskać więcej informacji na temat IDE, z którymi będziemy pracować, zapoznaj się z naszymi artykułami na temat debugowania w Eclipse i konfiguracji dla IntelliJ IDEA.

2.1. Zaćmienie

Po pierwsze, w Eclipse potrzebujemy wtyczki, takiej jak Enhanced Class Decompiler (ECD). Ta wtyczka używa pięciu różnych dekompilatorów. Możemy go zainstalować z Eclipse Marketplace, a następnie musimy ponownie uruchomić Eclipse.

Następnie ECD wymaga niewielkiej ilości konfiguracji, aby skojarzyć pliki klas z przeglądarką Class Decompiler:

Musimy również powiązać pliki „ .class bez źródła”:

Na koniec możemy użyć dekompilatora, naciskając Ctrl + lewy przycisk myszy na nazwie klasy . W nawiasach widzimy dekompilator używany na karcie pliku.

W tym przykładzie używamy FernFlower:

2.2. IntelliJ IDEA

W przeciwieństwie do Eclipse, IntelliJ IDEA dostarcza domyślnie dekompilator FernFlower .

Aby go użyć, po prostu Ctrl + lewy przycisk myszy na nazwie klasy i wyświetl kod:

Możemy również pobrać źródło. Pobranie źródła zapewni rzeczywisty kod i komentarze.

Na przykład klasa adnotacji Component na powyższym zrzucie ekranu zawiera Javadoc na temat użycia Component . Możemy zauważyć różnicę:

Chociaż dekompilacja jest bardzo pomocna, nie zawsze daje pełny obraz . Pełny kod źródłowy daje nam pełny obraz.

3. Dekompilacja wiersza poleceń

Przed wtyczkami IDE do dekompilacji klas używano wiersza poleceń. Dekompilatory wiersza polecenia mogą być również przydatne do debugowania kodu bajtowego Java na serwerze zdalnym, który nie jest dostępny za pomocą IDE lub GUI.

Na przykład możemy dekompilować za pomocą JDCommandLine za pomocą prostego polecenia jar:

java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes

Nie pomijaj parametru ./classes. Definiuje katalog wyjściowy.

Po udanej dekompilacji możemy uzyskać dostęp do plików źródłowych zawartych w katalogu wyjściowym. Są teraz gotowe do przeglądania przez edytor tekstu, taki jak Vim.

4. Wniosek

Przyjrzeliśmy się dekompilacji w środowiskach IDE Eclipse i IntelliJ IDEA, a także opcji wiersza poleceń, gdy nie są one dostępne.

Przyjrzeliśmy się również różnicy między łączeniem kodu źródłowego a dekompilacją.