2016-06-19 1 views
2

J'utilise le programme JBE (Java Bytecode Editor) http://set.ee/jbe. Je suis en train de compiler bytecode .class fichier, mais il continue à produire des erreurs dues (bien que je suis ne change rien)Java Bytecode compilation "Erreur de syntaxe à la ligne, instruction"

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

Cela fait partie de l'original:

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

Il peut être utile d'avoir des numéros de ligne ainsi que des informations sur la version Java cible. – hotzst

+0

Avez-vous essayé de mettre les instructions larges sur une seule ligne? par exemple. 'large astore 256'. C'est probablement un bug dans JBE. Quoi qu'il en soit, si vous voulez un assembleur/désassembleur de bytecode qui supporte entièrement chaque fonctionnalité de classfile et qui a de meilleurs messages d'erreur, il y a toujours Krakatau. – Antimony

+0

Je pense que c'est le problème que j'ai. J'ai résolu une autre erreur en fusionnant plusieurs lignes. Je vais mettre à jour bientôt. Je vous remercie. –

Répondre

0

I Je ne connais pas JBE, mais je suppose que le problème est que les instructions larges sont réparties sur deux lignes.

La plupart des assembleurs de bytecode Java s'attendent à ce qu'il soit sur une seule ligne, par ex. wide astore 256, parce que les deux moitiés font partie de la même instruction à toutes fins utiles, et le codage de la deuxième partie dépend de si elle est large ou non.

Si tel est le cas, et que JBE ne génère pas d'instructions étendues dans le format qu'il attend lui-même, il s'agit d'un bug avec JBE et vous devriez le signaler. Sur une note de côté, vous voudrez peut-être passer au mode d'édition avec le code Krakatau assembler/disassembler, car il prend en charge toutes les fonctions classfile connues ou documentées et l'assembleur contient d'autres messages d'erreur utiles. (Divulgation: Je suis l'auteur de Krakatau)