sobota 27. prosince 2014

Procyon

Balík Procyon je open source projekt vyvíjený pod licencí Apache 2.0. Vývoj započal koncem roku 2012 hlavním vývojářem Mikem Strobelem. Domovské stránky s možností stažení zdrojových kódů, drobným popisem a návodem lze nalézt na adrese https://bitbucket.org/mstrobel/procyon.

Procyon je balík nástrojů pro generování a analýzu zdrojového kódu. Hlavní části (knihovny) jsou Core framework, Reflection framework, Expression framework, Compiler toolset a Java decompiler.

Je nutno podotknout, že dekompilace je poměrně náročná operace a vyžaduje hodně vypočetního času procesoru. Dekompilace velkého projektu může na průměrném stroji trvat několik jednotek až desítek minut.

Použití


Pokud je stažen již zkompilovaný procyon-decompiler.jar , lze si spuštěním tohoto programu vypsat nápovědu:

java -jar procyon-decompiler.jar -?

Nebo je možné se rovnou pokusit dekompilovat nejaký soubor. Pro vyzkoušení funkčnosti lze vyzkoušet dekompilovat standardní knihovny javy jako například java.lang.String. Soubor pro dekompilaci se zadává jako parametr programu.

java -jar procyon-decompiler.jar java.lang.String

V případě použití dekompilátoru v terminálech, které neposkytují obarvení textu (vyznačení syntaxe) bude uživatel značně ochuzen. Proto se doporučují terminály s možností zabarvování textu a pokud přesto detekce ANSI selže, je možné toto vynutit přidáním argumentu -DAnsi=true.

java -DAnsi=true -jar procyon-decompiler.jar java.lang.String

Balík Procyon umožňuje také dekompilaci celých .jar souborů. K tomu je potřeba přidat dekompilátoru argumet -jar, oznamující typ přícozího souboru a dále je možné si výsledek uložit do vybraného umístění.

java -jar procyon-decompiler.jar -jar soub.jar -o out

 

Decompiler API


Tolik k použití již hotového řešení dekompilace. Dále se podíváme na způsob použití balíku Procyon v kódu. V kódu je totiž potřeba Decompiler API, které však obsahuje pouze dvě metody.


public static void decompile(
    final String internalName, 
    final ITextOutput output
);

public static void decompile(
    final String internalName, 
    final ITextOutput output
    final DecompilerSettings settings
);

Prvním parametrem funkce decompile je proměnná typu String, která požaduje v textovém tvaru identifikaci souboru pro dekompilaci. Identifikace může být definována buď adresou v souborovém systému nebo adresu v Java notaci k standardní knihovně (např.: java.lang.String). Druhý parametr je výstup metody v datovém typu ITextOutput, který je definován v rámci balíku Procyon. Poslední parametr je volitelný a je jím možno nastavit některé parametry dekompilace. V následujícím příkladu lze vidět jednoduché použití této funkce s výstupem na terminál.



final DecompilerSettings settings = DecompilerSettings.javaDefaults();

try (final FileOutputStream stream = new FileOutputStream("path/to/file");
     final OutputStreamWriter writer = new OutputStreamWriter(stream)) {

    Decompiler.decompile(
        "java/lang/String",
        new PlainTextOutput(writer),
        settings
    );
}
catch (final IOException e) {
    // handle error
}




Zdroje:
https://bitbucket.org/mstrobel/procyon
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
https://bitbucket.org/mstrobel/procyon/wiki/Decompiler%20API

Žádné komentáře:

Okomentovat