2016-06-19 13 views
2

Ich verwende das Programm JBE (Java Bytecode Editor) http://set.ee/jbe. Ich versuche Bytecode kompiliert Datei .class aber es hält Fehler aufgrund ausgibt (obwohl ich etwas nicht ändern)Java Bytecode Kompilierung "Syntaxfehler bei Zeile, Anweisung"

Error: Syntax error at line 3088, instruction "wide" 
Error: Syntax error at line 3090, instruction "wide" 
Error: Syntax error at line 3096, instruction "wide" 

Dieser Teil des Originals:

new os 
dup 
sipush 399 
bipush 42 
invokespecial os/<init>(II)V 
astore 255 
ldc "center_tile_s" 
invokestatic nz/cX(Ljava/lang/String;)Lor; 
wide 
astore 256 
wide 
aload 256 
ldc 0.85 
invokevirtual oi/j(F)V 
aload 255 
ldc "layer_591" 
wide 
aload 256 
invokevirtual os/b(Ljava/lang/String;Loi;)V 
ldc "center_tile_s" 
invokestatic nz/cX(Ljava/lang/String;)Lor; 
wide 
astore 257 
wide 
aload 257 
ldc 0.85 
invokevirtual oi/j(F)V 
wide 
aload 257 
iconst_0 
bipush 20 
invokevirtual oi/p(II)V 
aload 255 
ldc "layer_592" 
wide 
aload 257 
invokevirtual os/b(Ljava/lang/String;Loi;)V 
+0

Es kann hilfreich sein, Zeilennummern sowie einige Informationen über die Java-Zielversion zu haben. – hotzst

+0

Haben Sie versucht, die umfangreichen Anweisungen in eine Zeile zu schreiben? z.B. 'Wide astore 256'. Dies ist wahrscheinlich ein Fehler in JBE. Wie auch immer, wenn Sie einen Bytecode-Assembler/Disassembler wollen, der alle Klassendatei-Funktionen vollständig unterstützt und bessere Fehlermeldungen hat, gibt es immer Krakatau. – Antimony

+0

Ich denke, das ist das Problem, das ich habe. Ich habe einen weiteren Fehler gelöst, indem ich mehrere Zeilen zusammengeführt habe. Ich werde bald aktualisieren. Vielen Dank. –

Antwort

0

I Ich bin nicht vertraut mit JBE, aber ich vermute, das Problem ist, dass die breiten Anweisungen über zwei Zeilen aufgeteilt sind.

Die meisten Java-Bytecode-Assembler erwarten, dass sie sich in einer einzelnen Zeile befinden, z. wide astore 256, weil die zwei Hälften für alle Absichten und Zwecke Teil der gleichen Anweisung sind, und die Codierung des zweiten Teils davon abhängt, ob es breit ist oder nicht.

Wenn das der Fall ist, und JBE keine breite Anweisung in dem Format ausgibt, das es selbst erwartet, dann ist dies ein Fehler mit JBE und Sie sollten es melden.

Nebenbei bemerkt, möchten Sie vielleicht mit der Krakatau assembler/disassembler zum Bearbeiten von Bytecode wechseln, da es jede bekannte oder dokumentierte Klassendatei-Funktion unterstützt und der Assembler mehr hilfreiche Fehlermeldungen hat. (Disclosure: Ich bin der Autor von Krakatau)