2013-06-05 91 views
1

我使用的程序乙腦(Java字節碼編輯器)http://set.ee/jbe 我有以下的字節碼,但它持續輸出由於錯誤字節碼編譯錯誤

Error: Argument type error at line 53, instruction "ldc" 
Error: Syntax error at line 54, instruction """ 
Error: Argument type error at line 100, instruction "ldc" 
Error: Syntax error at line 101, instruction """ 
Error: Argument type error at line 154, instruction "ldc" 
Error: Syntax error at line 155, instruction """ 
Error: Argument type error at line 206, instruction "ldc" 
Error: Syntax error at line 207, instruction """ 

例如第2個錯誤是指

ldc "); 
" 

我理解爲什麼這會導致錯誤,但是如何在末尾插入\ r \ n

指令

getstatic BlockResources/instance LBlockResources; 
aload_0 
invokevirtual BlockBase/GetTypeID()I 
invokevirtual BlockResources/getTextureMappingData(I)LTextureMappingData; 
astore_2 
aload_0 
invokevirtual BlockBase/GetMeta()I 
ifne 103 
iload_1 
ifeq 57 
new java/lang/StringBuilder 
dup 
ldc "  world.setBlockWithNotify(i + " 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
aload_0 
invokevirtual BlockBase/GetX()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", j + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetY()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", k + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetZ()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_2 
ifnull 39 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ifnull 39 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ldc "" 
if_acmpne 43 
aload_0 
invokevirtual BlockBase/GetTypeID()I 
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer; 
goto 52 
new java/lang/StringBuilder 
dup 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
invokestatic java/lang/String/valueOf(Ljava/lang/Object;)Ljava/lang/String; 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
ldc ".blockID" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/Object;)Ljava/lang/StringBuilder; 
ldc "); 
" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
areturn 
new java/lang/StringBuilder 
dup 
ldc "  world.setBlock(i + " 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
aload_0 
invokevirtual BlockBase/GetX()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", j + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetY()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", k + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetZ()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_2 
ifnull 85 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ifnull 85 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ldc "" 
if_acmpne 89 
aload_0 
invokevirtual BlockBase/GetTypeID()I 
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer; 
goto 98 
new java/lang/StringBuilder 
dup 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
invokestatic java/lang/String/valueOf(Ljava/lang/Object;)Ljava/lang/String; 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
ldc ".blockID" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/Object;)Ljava/lang/StringBuilder; 
ldc "); 
" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
areturn 
iload_1 
ifeq 156 
new java/lang/StringBuilder 
dup 
ldc "  world.setBlockAndMetadataWithNotify(i + " 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
aload_0 
invokevirtual BlockBase/GetX()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", j + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetY()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", k + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetZ()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_2 
ifnull 133 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ifnull 133 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ldc "" 
if_acmpne 137 
aload_0 
invokevirtual BlockBase/GetTypeID()I 
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer; 
goto 146 
new java/lang/StringBuilder 
dup 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
invokestatic java/lang/String/valueOf(Ljava/lang/Object;)Ljava/lang/String; 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
ldc ".blockID" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/Object;)Ljava/lang/StringBuilder; 
ldc ", " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetMeta()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc "); 
" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
areturn 
new java/lang/StringBuilder 
dup 
ldc "  world.setBlockAndMetadata(i + " 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
aload_0 
invokevirtual BlockBase/GetX()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", j + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetY()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", k + " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetZ()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc ", " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_2 
ifnull 184 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ifnull 184 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
ldc "" 
if_acmpne 188 
aload_0 
invokevirtual BlockBase/GetTypeID()I 
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer; 
goto 197 
new java/lang/StringBuilder 
dup 
aload_2 
invokevirtual TextureMappingData/getSpawnCode()Ljava/lang/String; 
invokestatic java/lang/String/valueOf(Ljava/lang/Object;)Ljava/lang/String; 
invokespecial java/lang/StringBuilder/<init>(Ljava/lang/String;)V 
ldc ".blockID" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/Object;)Ljava/lang/StringBuilder; 
ldc ", " 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
aload_0 
invokevirtual BlockBase/GetMeta()I 
invokevirtual java/lang/StringBuilder/append(I)Ljava/lang/StringBuilder; 
ldc "); 
" 
invokevirtual java/lang/StringBuilder/append(Ljava/lang/String;)Ljava/lang/StringBuilder; 
invokevirtual java/lang/StringBuilder/toString()Ljava/lang/String; 
areturn 
+0

我不知道如何在JBE中做到這一點,但你可以很容易地在Krakatau做字符串轉義。 – Antimony

回答

0

它就像你寫的一樣簡單。例如修改第53行到ldc ");\r\n"

+0

ldc「); \ r \ n」是一個字符串,不是回車 – JohnM

+0

對不起。我誤解了你的問題。您可以:更改'JAsmParser.java'的代碼並在第43行(在// switchmode ...之前)添加'fullInstr = fullInstr.replaceAll(「\\\\ r」,「\ r」); ''和'fullInstr = fullInstr.replaceAll(「\\\\ n」,「\ n」);'或者在代碼編輯器中向StringBuilder添加兩個char'aload_2 bipush 13 invokevirtual java/lang/StringBuilder/append (C)Ljava /郎/ StringBuilder的; pop'和'aload_2 bipush 10 invokevirtual java/lang/StringBuilder/append(C)Ljava/lang/StringBuilder; pop'。代碼中可能有更好的解決方案。這是通過快速查看後發現的。 – SubOptimal