Java字节编译"语法错误,行,指令"

时间:2016-06-19 14:38:50

标签: java bytecode

我正在使用程序JBE(Java字节码编辑器)http://set.ee/jbe。 我正在尝试将字节码编译为.class文件,但它会因输出错误而导致输出错误(尽管我不会改变任何内容)

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

这是原作的一部分:

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

1 个答案:

答案 0 :(得分:0)

我不熟悉JBE,但我怀疑问题是宽指令分为两行。

大多数Java字节码汇编程序都希望它在一行上,例如wide astore 256,因为这两半是所有意图和目的的同一指令的一部分,第二部分的编码取决于它是否宽泛。

如果是这种情况,并且JBE没有以它自己期望的格式输出宽指令,那么这是JBE的一个错误,你应该报告它。

另外,您可能希望切换到使用Krakatau assembler/disassembler编辑字节码,因为它支持每个已知或记录的类文件功能,并且汇编器有更多有用的错误消息。 (披露:我是Krakatau的作者)