2010-06-30 6 views
44

Ich bin auf der Suche nach einem kurzen Programm (vielleicht eine Hallo Welt) in Java-Bytecode. Ich möchte nur den Bytecode mit meinem Texteditor schreiben und ausführen. Wie würde ich das tun? Hast du ein Beispiel? Vielen Dank!Programmierung in Java Bytecode

+0

Lesen Sie https://docs.oracle.com/javase/specs/jvms/se7/html/index.html und verwenden Sie 'printf' in bash :-) –

Antwort

42

Sie Jasmin versuchen könnte!

.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 

Und dann laufen Sie es wie jede Klasse:

 
> java HelloWorld 
Hello World. 

aktualisieren

Ich sehe, dass Ihre Frage „erwähnt, ohne mit Javac oder Java ". Können Sie erklären, wie Sie diese Aussage meinten?

+6

Dieser Beitrag bringt mich dazu, die Arbeit, die ich heute mache, vorzutäuschen und mit Jasmin herumzubasteln. :-) – corsiKa

+0

+1 Jasmin kam mir in den Sinn und ich konnte mich nicht an den Namen erinnern. Es wurde in einem Buch vorgestellt, das die JVM-Interna erklärt. Ich vergesse auch den Namen des Buches, * seufz * ... – bakkal

+0

@Bakkal: Laut dem Link: "Jasmin wurde ursprünglich als Begleiter zu dem Buch" Java Virtual Machine ", geschrieben von Jon Meyer und Troy Downing und veröffentlicht von O'Reilly Associates. " –

8

Haben Sie überlegt JBE (Java Bytecode Editor)?
Es basiert auf Bytecode Engineering-Bibliothek Apache (BCEL)

+0

Tippfehler: es ist BCEL. Sonst toller Editor –

7

Vielleicht dieser Artikel kann Ihnen den Einstieg: Bytecode basics (ein wenig alt, aber Sie werden auf die Idee kommen).

Die class file format wird auch nützlich sein: D

+0

+1 für den Beitrag – Pops

7

Byte-Code wird als tatsächliche Bytes geschrieben, die normalerweise nicht einfach von einem normalen Texteditor bearbeitet werden können.

Dies bedeutet, dass Sie etwas benötigen, das eine textuelle Darstellung in Binär konvertiert. Ein vernünftiger Ort zum Starten wäre ein Assembler wie .

8

Ich habe eine neue Java bytecode assembler erstellt, die abwärtskompatibel zu Jasmin ist, aber auch viele neue Funktionen hinzufügt und die Syntax leicht vereinfacht.

Hier ist ein Beispiel, wie Sie ein Hello World-Programm schreiben könnten.

.class public hello 
.super java/lang/Object 

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

    getstatic java/lang/System out Ljava/io/PrintStream; 
    ldc "Hello World!" 
    invokevirtual java/io/PrintStream println (Ljava/lang/Object;)V 
    return 
.end method 

I've also written a tutorial on bytecode assembly. Es deckt derzeit nur Hallo, Welt ab, aber ich kann es fortsetzen, wenn es Interesse gibt.

+1

der Link ist gebrochen – Manza

+0

Entschuldigung. Es sieht so aus als wäre das ganze Wiki weg. Ich maile ihnen, um zu sehen, ob sie es zurückbringen können oder irgendwelche Kopien haben. – Antimony