2009-03-12 4 views
6

Ich suche nach Wegen/Werkzeugen/Projekten Java-Bytecode in andere Programmiersprachen zu übersetzen oder zumindest in eine strukturierte Darstellung (wie XML). Idealerweise Open Source, natürlich.Java-Bytecode in andere Darstellungen und Programmiersprachen übersetzen

Ich habe ASM, die "Bytecode Manipulation und Analyse Framework" betrachtet. Es unterstützt keine Übersetzung in andere Darstellungen, sieht aber wie eine gute Grundlage für ein solches Projekt aus. Leider kommt keines der auf ihrer users page aufgeführten Projekte zu nahe.

Antwort

7

ASM hat die Baum-API, die Ihnen grundsätzlich die vollständige Struktur des Bytecodes geben kann. Scheint so, als ob es ziemlich einfach ist, das oder sogar die Besucher-API zu verwenden, um das in XML oder einem anderen Format auszudrucken. Nicht sicher, was das ist.

Das Zurückübersetzen in Java ist der Job eines Decompilers, und solche wie Jad machen es gut. Aber das ist schwer, weil a) während der Umwandlung von Quellcode in Bytecode Informationen verloren gehen und b) es eine Mehrdeutigkeit gibt, da mehrere Quellen denselben Bytecode liefern können.

Wenn Sie tatsächlich direkt von Bytecode zu einer anderen Hochsprache wechseln möchten, wird das sowohl umfassend als auch sinnvoll schwierig sein, aus denselben Gründen ist das Dekompilieren schwierig, außer sogar schlechter in eine andere Sprache.

Wenn Sie von der Java-Quelle zur Quelle einer anderen Sprache wechseln möchten, wurde dies zuvor wie in dieser Java-to-Python converter durchgeführt. Das ist etwas einfacher, da Sie Java in einen AST mit etwas wie Antlr oder den integrierten Java-Compiler-Tools Project Jackpot usw. konvertieren können. Selbst dann nehme ich an, dass Sie in der Zielsprache keinen sehr idiomatischen Code bekommen werden.

1

Sieht so aus, als ob Sie nach einem Cross-Compiler suchen. Ich kenne das Projekt xmlvm, habe es aber nie benutzt. Vielleicht passt das zu deinen Bedürfnissen.

1

Sie könnten gcj versuchen, Byte-Code in nativen Code zu konvertieren.

Wenn Sie in Sprachen wie Python/Groovy/Ruby konvertieren möchten, vielleicht in Erwägung ziehen, in diesen Sprachen direkt auf der JVM zu schreiben (ich weiß, das ist nicht genau was Sie suchen).

Vielleicht fangen Sie einige Beispiele von so etwas wie Eclipse Byte Code outline viewer.

Schließlich wird die Konvertierung von einer Low-Level-Sprache (Byte-Code) zu einem anderen wird ziemlich schwierig und Korrektheit wird ein Problem sein.

2

Versuchen Sie BCEL (Byte-Code-Engineering-Bibliothek). Sie können eine Visitor-Schnittstelle implementieren, die Sie verwenden können, um zu generieren, was immer Sie wollen (Quellcode in einer anderen Sprache, eine benutzerdefinierte AST, XML, was auch immer).

Ich habe es für ein Projekt in der Universität verwendet, wo ich (größtenteils) ein Programmanalyse-Framework, das über Java-Quellcode arbeitete, in ein Programm umwandelte, das auch gegen Java-Bytecode arbeiten konnte. Diese Aufgabe umfasste die Generierung von Knoten für die interne AST-Repräsentation des Analyse-Frameworks. Auch

,

ich Mager kurz in der Dokumentation des „ASM“ Projekt, das Sie erwähnt. Es sieht so aus, als ob es mehrere Besucherklassen definiert. Sie sollten in der Lage sein, diese zu verwenden, um das zu tun, was Sie auch wollen.Wenn Sie mit dem Besuchermuster nicht vertraut sind, sehen Sie sich die Beschreibung here an. Auch, wenn Sie es noch nicht gelesen haben, ist das Buch "Gang of Four" ein gutes Buch.