2012-12-30 3 views
11

In .NET-Plattform ist es möglich, ein Programm mit Common Intermediate Language direkt zu schreiben und die Quellen mit IL Assembler (ILASM) zu kompilieren.Ist es möglich, ein Programm mit Java-Bytecode-Anweisungen direkt zu schreiben?

Zum Beispiel unter dem Code ist "Hello World" Programm.

Ist es möglich, dass ein Programm mit Java-Bytecode-Anweisungen direkt wie .NET schreiben?

+1

Es verweisen könnte ist asm (http://asm.ow2.org/) dafür. – fge

+0

Keine Antwort auf Ihre Frage (was ja ist, aber nicht einfach;)) Hier ist ein schöner Blog-Beitrag mit Referenzen http://arhipov.blogspot.se/2011/01/java-bytecode-fundamentals.html?m=1 –

+0

Warum sollte jemand das tun wollen oder muss? Da es sich um eine stackbasierte Maschine handelt, bezweifle ich, dass es irgendwelche Tricks gibt, die der Compiler noch nicht kennt. – James

Antwort

7

Sie können Jasmin auschecken. Aus Wikipedia,

Einige Projekte bieten Java-Assembler zum Schreiben von Java-Bytecode von Hand. Assemblercode kann auch maschinell erzeugt werden, beispielsweise durch Compiler, der auf eine Java Virtual Machine abzielt. Bemerkenswerte Java-Assembler umfassen:

Jasmin, nimmt Textbeschreibungen für Java-Klassen, geschrieben in einer einfachen montageähnlichen Syntax mit Java Virtual Machine Befehlssatz und generiert eine Java-Klassendatei.

Jamaica, eine Makro-Assemblersprache für die Java Virtual Machine. Die Java-Syntax wird für die Klassen- oder Schnittstellendefinition verwendet. Methodenkörper werden mithilfe von Bytecode-Anweisungen angegeben.

Hinweis: Ich habe keines dieser Tools persönlich verwendet.

+0

Können diese Tools verwendet werden, um Inline-JVM-Anweisungen in normalen Java-Quellcode einzubetten? – Philipp

+0

@Philipp - Ich habe nie von einer Version von javac gehört, die inline "Assembler" Sprache erlauben würde. (Ich bin mir auch nicht sicher, wie gut/leicht Jasmin seit dem Loop-Annotations-Massaker funktioniert.) –

6

Sie könnten verwenden Jasmin

.class public HelloWorld 
.super java/lang/Object 

.method public static main([Ljava/lang/String;)V 
.limit stack 3 
.limit locals 1 

    getstatic  java/lang/System/out Ljava/io/PrintStream; 
    ldc   "Hello World." 
    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V 

return 

.end method 

Sie kompilieren mit:

java -jar jasmin.jar hello.j

Sie this auch

Verwandte Themen