Update ASM library to v9.1 and support JDK > 13

This commit is contained in:
Scorpius 2021-03-15 17:07:09 +02:00
parent a306db20ab
commit 61e6619869
14 changed files with 331 additions and 336 deletions

View file

@ -29,4 +29,5 @@
* samczsun * samczsun
* ItzSomebody * ItzSomebody
* DreamSworK * DreamSworK
* BitScorpio
* If I missed you, please feel free to contact me @Konloch or konloch@gmail.com * If I missed you, please feel free to contact me @Konloch or konloch@gmail.com

View file

@ -3,14 +3,8 @@
Bytecode Viewer - a lightweight user friendly Java Bytecode Viewer. Bytecode Viewer - a lightweight user friendly Java Bytecode Viewer.
#### New Features #### New Features
* WAR & JSP Loading * Updated ASM library to version 9.1
* JADX-Core Decompiler * Added support to Java files compiled using JDK > 13
* Fixed APK & dex loading
* Fixed Java 10+ classfiles
* Better visual feedback due to the new busy icon system
* Synchronized viewing pane option & quick method selection
* Updated most libraries to their 2019 version
* Tons of bug fixes and general improvements
#### Links #### Links

Binary file not shown.

BIN
libs/asm-9.1.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/asm-analysis-9.1.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/asm-commons-9.1.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/asm-tree-9.1.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
libs/asm-util-9.1.jar Normal file

Binary file not shown.

View file

@ -190,7 +190,7 @@ public class ClassReader {
this.b = classFileBuffer; this.b = classFileBuffer;
// Check the class' major_version. This field is after the magic and minor_version fields, which // Check the class' major_version. This field is after the magic and minor_version fields, which
// use 4 and 2 bytes respectively. // use 4 and 2 bytes respectively.
if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V13) { if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V17) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Unsupported class file major version " + readShort(classFileOffset + 6)); "Unsupported class file major version " + readShort(classFileOffset + 6));
} }
@ -1334,113 +1334,113 @@ public class ClassReader {
final int bytecodeOffset = currentOffset - bytecodeStartOffset; final int bytecodeOffset = currentOffset - bytecodeStartOffset;
final int opcode = classBuffer[currentOffset] & 0xFF; final int opcode = classBuffer[currentOffset] & 0xFF;
switch (opcode) { switch (opcode) {
case Constants.NOP: case Opcodes.NOP:
case Constants.ACONST_NULL: case Opcodes.ACONST_NULL:
case Constants.ICONST_M1: case Opcodes.ICONST_M1:
case Constants.ICONST_0: case Opcodes.ICONST_0:
case Constants.ICONST_1: case Opcodes.ICONST_1:
case Constants.ICONST_2: case Opcodes.ICONST_2:
case Constants.ICONST_3: case Opcodes.ICONST_3:
case Constants.ICONST_4: case Opcodes.ICONST_4:
case Constants.ICONST_5: case Opcodes.ICONST_5:
case Constants.LCONST_0: case Opcodes.LCONST_0:
case Constants.LCONST_1: case Opcodes.LCONST_1:
case Constants.FCONST_0: case Opcodes.FCONST_0:
case Constants.FCONST_1: case Opcodes.FCONST_1:
case Constants.FCONST_2: case Opcodes.FCONST_2:
case Constants.DCONST_0: case Opcodes.DCONST_0:
case Constants.DCONST_1: case Opcodes.DCONST_1:
case Constants.IALOAD: case Opcodes.IALOAD:
case Constants.LALOAD: case Opcodes.LALOAD:
case Constants.FALOAD: case Opcodes.FALOAD:
case Constants.DALOAD: case Opcodes.DALOAD:
case Constants.AALOAD: case Opcodes.AALOAD:
case Constants.BALOAD: case Opcodes.BALOAD:
case Constants.CALOAD: case Opcodes.CALOAD:
case Constants.SALOAD: case Opcodes.SALOAD:
case Constants.IASTORE: case Opcodes.IASTORE:
case Constants.LASTORE: case Opcodes.LASTORE:
case Constants.FASTORE: case Opcodes.FASTORE:
case Constants.DASTORE: case Opcodes.DASTORE:
case Constants.AASTORE: case Opcodes.AASTORE:
case Constants.BASTORE: case Opcodes.BASTORE:
case Constants.CASTORE: case Opcodes.CASTORE:
case Constants.SASTORE: case Opcodes.SASTORE:
case Constants.POP: case Opcodes.POP:
case Constants.POP2: case Opcodes.POP2:
case Constants.DUP: case Opcodes.DUP:
case Constants.DUP_X1: case Opcodes.DUP_X1:
case Constants.DUP_X2: case Opcodes.DUP_X2:
case Constants.DUP2: case Opcodes.DUP2:
case Constants.DUP2_X1: case Opcodes.DUP2_X1:
case Constants.DUP2_X2: case Opcodes.DUP2_X2:
case Constants.SWAP: case Opcodes.SWAP:
case Constants.IADD: case Opcodes.IADD:
case Constants.LADD: case Opcodes.LADD:
case Constants.FADD: case Opcodes.FADD:
case Constants.DADD: case Opcodes.DADD:
case Constants.ISUB: case Opcodes.ISUB:
case Constants.LSUB: case Opcodes.LSUB:
case Constants.FSUB: case Opcodes.FSUB:
case Constants.DSUB: case Opcodes.DSUB:
case Constants.IMUL: case Opcodes.IMUL:
case Constants.LMUL: case Opcodes.LMUL:
case Constants.FMUL: case Opcodes.FMUL:
case Constants.DMUL: case Opcodes.DMUL:
case Constants.IDIV: case Opcodes.IDIV:
case Constants.LDIV: case Opcodes.LDIV:
case Constants.FDIV: case Opcodes.FDIV:
case Constants.DDIV: case Opcodes.DDIV:
case Constants.IREM: case Opcodes.IREM:
case Constants.LREM: case Opcodes.LREM:
case Constants.FREM: case Opcodes.FREM:
case Constants.DREM: case Opcodes.DREM:
case Constants.INEG: case Opcodes.INEG:
case Constants.LNEG: case Opcodes.LNEG:
case Constants.FNEG: case Opcodes.FNEG:
case Constants.DNEG: case Opcodes.DNEG:
case Constants.ISHL: case Opcodes.ISHL:
case Constants.LSHL: case Opcodes.LSHL:
case Constants.ISHR: case Opcodes.ISHR:
case Constants.LSHR: case Opcodes.LSHR:
case Constants.IUSHR: case Opcodes.IUSHR:
case Constants.LUSHR: case Opcodes.LUSHR:
case Constants.IAND: case Opcodes.IAND:
case Constants.LAND: case Opcodes.LAND:
case Constants.IOR: case Opcodes.IOR:
case Constants.LOR: case Opcodes.LOR:
case Constants.IXOR: case Opcodes.IXOR:
case Constants.LXOR: case Opcodes.LXOR:
case Constants.I2L: case Opcodes.I2L:
case Constants.I2F: case Opcodes.I2F:
case Constants.I2D: case Opcodes.I2D:
case Constants.L2I: case Opcodes.L2I:
case Constants.L2F: case Opcodes.L2F:
case Constants.L2D: case Opcodes.L2D:
case Constants.F2I: case Opcodes.F2I:
case Constants.F2L: case Opcodes.F2L:
case Constants.F2D: case Opcodes.F2D:
case Constants.D2I: case Opcodes.D2I:
case Constants.D2L: case Opcodes.D2L:
case Constants.D2F: case Opcodes.D2F:
case Constants.I2B: case Opcodes.I2B:
case Constants.I2C: case Opcodes.I2C:
case Constants.I2S: case Opcodes.I2S:
case Constants.LCMP: case Opcodes.LCMP:
case Constants.FCMPL: case Opcodes.FCMPL:
case Constants.FCMPG: case Opcodes.FCMPG:
case Constants.DCMPL: case Opcodes.DCMPL:
case Constants.DCMPG: case Opcodes.DCMPG:
case Constants.IRETURN: case Opcodes.IRETURN:
case Constants.LRETURN: case Opcodes.LRETURN:
case Constants.FRETURN: case Opcodes.FRETURN:
case Constants.DRETURN: case Opcodes.DRETURN:
case Constants.ARETURN: case Opcodes.ARETURN:
case Constants.RETURN: case Opcodes.RETURN:
case Constants.ARRAYLENGTH: case Opcodes.ARRAYLENGTH:
case Constants.ATHROW: case Opcodes.ATHROW:
case Constants.MONITORENTER: case Opcodes.MONITORENTER:
case Constants.MONITOREXIT: case Opcodes.MONITOREXIT:
case Constants.ILOAD_0: case Constants.ILOAD_0:
case Constants.ILOAD_1: case Constants.ILOAD_1:
case Constants.ILOAD_2: case Constants.ILOAD_2:
@ -1483,24 +1483,24 @@ public class ClassReader {
case Constants.ASTORE_3: case Constants.ASTORE_3:
currentOffset += 1; currentOffset += 1;
break; break;
case Constants.IFEQ: case Opcodes.IFEQ:
case Constants.IFNE: case Opcodes.IFNE:
case Constants.IFLT: case Opcodes.IFLT:
case Constants.IFGE: case Opcodes.IFGE:
case Constants.IFGT: case Opcodes.IFGT:
case Constants.IFLE: case Opcodes.IFLE:
case Constants.IF_ICMPEQ: case Opcodes.IF_ICMPEQ:
case Constants.IF_ICMPNE: case Opcodes.IF_ICMPNE:
case Constants.IF_ICMPLT: case Opcodes.IF_ICMPLT:
case Constants.IF_ICMPGE: case Opcodes.IF_ICMPGE:
case Constants.IF_ICMPGT: case Opcodes.IF_ICMPGT:
case Constants.IF_ICMPLE: case Opcodes.IF_ICMPLE:
case Constants.IF_ACMPEQ: case Opcodes.IF_ACMPEQ:
case Constants.IF_ACMPNE: case Opcodes.IF_ACMPNE:
case Constants.GOTO: case Opcodes.GOTO:
case Constants.JSR: case Opcodes.JSR:
case Constants.IFNULL: case Opcodes.IFNULL:
case Constants.IFNONNULL: case Opcodes.IFNONNULL:
createLabel(bytecodeOffset + readShort(currentOffset + 1), labels); createLabel(bytecodeOffset + readShort(currentOffset + 1), labels);
currentOffset += 3; currentOffset += 3;
break; break;
@ -1533,27 +1533,27 @@ public class ClassReader {
break; break;
case Constants.WIDE: case Constants.WIDE:
switch (classBuffer[currentOffset + 1] & 0xFF) { switch (classBuffer[currentOffset + 1] & 0xFF) {
case Constants.ILOAD: case Opcodes.ILOAD:
case Constants.FLOAD: case Opcodes.FLOAD:
case Constants.ALOAD: case Opcodes.ALOAD:
case Constants.LLOAD: case Opcodes.LLOAD:
case Constants.DLOAD: case Opcodes.DLOAD:
case Constants.ISTORE: case Opcodes.ISTORE:
case Constants.FSTORE: case Opcodes.FSTORE:
case Constants.ASTORE: case Opcodes.ASTORE:
case Constants.LSTORE: case Opcodes.LSTORE:
case Constants.DSTORE: case Opcodes.DSTORE:
case Constants.RET: case Opcodes.RET:
currentOffset += 4; currentOffset += 4;
break; break;
case Constants.IINC: case Opcodes.IINC:
currentOffset += 6; currentOffset += 6;
break; break;
default: default:
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
break; break;
case Constants.TABLESWITCH: case Opcodes.TABLESWITCH:
// Skip 0 to 3 padding bytes. // Skip 0 to 3 padding bytes.
currentOffset += 4 - (bytecodeOffset & 3); currentOffset += 4 - (bytecodeOffset & 3);
// Read the default label and the number of table entries. // Read the default label and the number of table entries.
@ -1566,7 +1566,7 @@ public class ClassReader {
currentOffset += 4; currentOffset += 4;
} }
break; break;
case Constants.LOOKUPSWITCH: case Opcodes.LOOKUPSWITCH:
// Skip 0 to 3 padding bytes. // Skip 0 to 3 padding bytes.
currentOffset += 4 - (bytecodeOffset & 3); currentOffset += 4 - (bytecodeOffset & 3);
// Read the default label and the number of switch cases. // Read the default label and the number of switch cases.
@ -1579,44 +1579,44 @@ public class ClassReader {
currentOffset += 8; currentOffset += 8;
} }
break; break;
case Constants.ILOAD: case Opcodes.ILOAD:
case Constants.LLOAD: case Opcodes.LLOAD:
case Constants.FLOAD: case Opcodes.FLOAD:
case Constants.DLOAD: case Opcodes.DLOAD:
case Constants.ALOAD: case Opcodes.ALOAD:
case Constants.ISTORE: case Opcodes.ISTORE:
case Constants.LSTORE: case Opcodes.LSTORE:
case Constants.FSTORE: case Opcodes.FSTORE:
case Constants.DSTORE: case Opcodes.DSTORE:
case Constants.ASTORE: case Opcodes.ASTORE:
case Constants.RET: case Opcodes.RET:
case Constants.BIPUSH: case Opcodes.BIPUSH:
case Constants.NEWARRAY: case Opcodes.NEWARRAY:
case Constants.LDC: case Opcodes.LDC:
currentOffset += 2; currentOffset += 2;
break; break;
case Constants.SIPUSH: case Opcodes.SIPUSH:
case Constants.LDC_W: case Constants.LDC_W:
case Constants.LDC2_W: case Constants.LDC2_W:
case Constants.GETSTATIC: case Opcodes.GETSTATIC:
case Constants.PUTSTATIC: case Opcodes.PUTSTATIC:
case Constants.GETFIELD: case Opcodes.GETFIELD:
case Constants.PUTFIELD: case Opcodes.PUTFIELD:
case Constants.INVOKEVIRTUAL: case Opcodes.INVOKEVIRTUAL:
case Constants.INVOKESPECIAL: case Opcodes.INVOKESPECIAL:
case Constants.INVOKESTATIC: case Opcodes.INVOKESTATIC:
case Constants.NEW: case Opcodes.NEW:
case Constants.ANEWARRAY: case Opcodes.ANEWARRAY:
case Constants.CHECKCAST: case Opcodes.CHECKCAST:
case Constants.INSTANCEOF: case Opcodes.INSTANCEOF:
case Constants.IINC: case Opcodes.IINC:
currentOffset += 3; currentOffset += 3;
break; break;
case Constants.INVOKEINTERFACE: case Opcodes.INVOKEINTERFACE:
case Constants.INVOKEDYNAMIC: case Opcodes.INVOKEDYNAMIC:
currentOffset += 5; currentOffset += 5;
break; break;
case Constants.MULTIANEWARRAY: case Opcodes.MULTIANEWARRAY:
currentOffset += 4; currentOffset += 4;
break; break;
default: default:
@ -1883,113 +1883,113 @@ public class ClassReader {
// Visit the instruction at this bytecode offset. // Visit the instruction at this bytecode offset.
int opcode = classBuffer[currentOffset] & 0xFF; int opcode = classBuffer[currentOffset] & 0xFF;
switch (opcode) { switch (opcode) {
case Constants.NOP: case Opcodes.NOP:
case Constants.ACONST_NULL: case Opcodes.ACONST_NULL:
case Constants.ICONST_M1: case Opcodes.ICONST_M1:
case Constants.ICONST_0: case Opcodes.ICONST_0:
case Constants.ICONST_1: case Opcodes.ICONST_1:
case Constants.ICONST_2: case Opcodes.ICONST_2:
case Constants.ICONST_3: case Opcodes.ICONST_3:
case Constants.ICONST_4: case Opcodes.ICONST_4:
case Constants.ICONST_5: case Opcodes.ICONST_5:
case Constants.LCONST_0: case Opcodes.LCONST_0:
case Constants.LCONST_1: case Opcodes.LCONST_1:
case Constants.FCONST_0: case Opcodes.FCONST_0:
case Constants.FCONST_1: case Opcodes.FCONST_1:
case Constants.FCONST_2: case Opcodes.FCONST_2:
case Constants.DCONST_0: case Opcodes.DCONST_0:
case Constants.DCONST_1: case Opcodes.DCONST_1:
case Constants.IALOAD: case Opcodes.IALOAD:
case Constants.LALOAD: case Opcodes.LALOAD:
case Constants.FALOAD: case Opcodes.FALOAD:
case Constants.DALOAD: case Opcodes.DALOAD:
case Constants.AALOAD: case Opcodes.AALOAD:
case Constants.BALOAD: case Opcodes.BALOAD:
case Constants.CALOAD: case Opcodes.CALOAD:
case Constants.SALOAD: case Opcodes.SALOAD:
case Constants.IASTORE: case Opcodes.IASTORE:
case Constants.LASTORE: case Opcodes.LASTORE:
case Constants.FASTORE: case Opcodes.FASTORE:
case Constants.DASTORE: case Opcodes.DASTORE:
case Constants.AASTORE: case Opcodes.AASTORE:
case Constants.BASTORE: case Opcodes.BASTORE:
case Constants.CASTORE: case Opcodes.CASTORE:
case Constants.SASTORE: case Opcodes.SASTORE:
case Constants.POP: case Opcodes.POP:
case Constants.POP2: case Opcodes.POP2:
case Constants.DUP: case Opcodes.DUP:
case Constants.DUP_X1: case Opcodes.DUP_X1:
case Constants.DUP_X2: case Opcodes.DUP_X2:
case Constants.DUP2: case Opcodes.DUP2:
case Constants.DUP2_X1: case Opcodes.DUP2_X1:
case Constants.DUP2_X2: case Opcodes.DUP2_X2:
case Constants.SWAP: case Opcodes.SWAP:
case Constants.IADD: case Opcodes.IADD:
case Constants.LADD: case Opcodes.LADD:
case Constants.FADD: case Opcodes.FADD:
case Constants.DADD: case Opcodes.DADD:
case Constants.ISUB: case Opcodes.ISUB:
case Constants.LSUB: case Opcodes.LSUB:
case Constants.FSUB: case Opcodes.FSUB:
case Constants.DSUB: case Opcodes.DSUB:
case Constants.IMUL: case Opcodes.IMUL:
case Constants.LMUL: case Opcodes.LMUL:
case Constants.FMUL: case Opcodes.FMUL:
case Constants.DMUL: case Opcodes.DMUL:
case Constants.IDIV: case Opcodes.IDIV:
case Constants.LDIV: case Opcodes.LDIV:
case Constants.FDIV: case Opcodes.FDIV:
case Constants.DDIV: case Opcodes.DDIV:
case Constants.IREM: case Opcodes.IREM:
case Constants.LREM: case Opcodes.LREM:
case Constants.FREM: case Opcodes.FREM:
case Constants.DREM: case Opcodes.DREM:
case Constants.INEG: case Opcodes.INEG:
case Constants.LNEG: case Opcodes.LNEG:
case Constants.FNEG: case Opcodes.FNEG:
case Constants.DNEG: case Opcodes.DNEG:
case Constants.ISHL: case Opcodes.ISHL:
case Constants.LSHL: case Opcodes.LSHL:
case Constants.ISHR: case Opcodes.ISHR:
case Constants.LSHR: case Opcodes.LSHR:
case Constants.IUSHR: case Opcodes.IUSHR:
case Constants.LUSHR: case Opcodes.LUSHR:
case Constants.IAND: case Opcodes.IAND:
case Constants.LAND: case Opcodes.LAND:
case Constants.IOR: case Opcodes.IOR:
case Constants.LOR: case Opcodes.LOR:
case Constants.IXOR: case Opcodes.IXOR:
case Constants.LXOR: case Opcodes.LXOR:
case Constants.I2L: case Opcodes.I2L:
case Constants.I2F: case Opcodes.I2F:
case Constants.I2D: case Opcodes.I2D:
case Constants.L2I: case Opcodes.L2I:
case Constants.L2F: case Opcodes.L2F:
case Constants.L2D: case Opcodes.L2D:
case Constants.F2I: case Opcodes.F2I:
case Constants.F2L: case Opcodes.F2L:
case Constants.F2D: case Opcodes.F2D:
case Constants.D2I: case Opcodes.D2I:
case Constants.D2L: case Opcodes.D2L:
case Constants.D2F: case Opcodes.D2F:
case Constants.I2B: case Opcodes.I2B:
case Constants.I2C: case Opcodes.I2C:
case Constants.I2S: case Opcodes.I2S:
case Constants.LCMP: case Opcodes.LCMP:
case Constants.FCMPL: case Opcodes.FCMPL:
case Constants.FCMPG: case Opcodes.FCMPG:
case Constants.DCMPL: case Opcodes.DCMPL:
case Constants.DCMPG: case Opcodes.DCMPG:
case Constants.IRETURN: case Opcodes.IRETURN:
case Constants.LRETURN: case Opcodes.LRETURN:
case Constants.FRETURN: case Opcodes.FRETURN:
case Constants.DRETURN: case Opcodes.DRETURN:
case Constants.ARETURN: case Opcodes.ARETURN:
case Constants.RETURN: case Opcodes.RETURN:
case Constants.ARRAYLENGTH: case Opcodes.ARRAYLENGTH:
case Constants.ATHROW: case Opcodes.ATHROW:
case Constants.MONITORENTER: case Opcodes.MONITORENTER:
case Constants.MONITOREXIT: case Opcodes.MONITOREXIT:
methodVisitor.visitInsn(opcode); methodVisitor.visitInsn(opcode);
currentOffset += 1; currentOffset += 1;
break; break;
@ -2041,24 +2041,24 @@ public class ClassReader {
methodVisitor.visitVarInsn(Opcodes.ISTORE + (opcode >> 2), opcode & 0x3); methodVisitor.visitVarInsn(Opcodes.ISTORE + (opcode >> 2), opcode & 0x3);
currentOffset += 1; currentOffset += 1;
break; break;
case Constants.IFEQ: case Opcodes.IFEQ:
case Constants.IFNE: case Opcodes.IFNE:
case Constants.IFLT: case Opcodes.IFLT:
case Constants.IFGE: case Opcodes.IFGE:
case Constants.IFGT: case Opcodes.IFGT:
case Constants.IFLE: case Opcodes.IFLE:
case Constants.IF_ICMPEQ: case Opcodes.IF_ICMPEQ:
case Constants.IF_ICMPNE: case Opcodes.IF_ICMPNE:
case Constants.IF_ICMPLT: case Opcodes.IF_ICMPLT:
case Constants.IF_ICMPGE: case Opcodes.IF_ICMPGE:
case Constants.IF_ICMPGT: case Opcodes.IF_ICMPGT:
case Constants.IF_ICMPLE: case Opcodes.IF_ICMPLE:
case Constants.IF_ACMPEQ: case Opcodes.IF_ACMPEQ:
case Constants.IF_ACMPNE: case Opcodes.IF_ACMPNE:
case Constants.GOTO: case Opcodes.GOTO:
case Constants.JSR: case Opcodes.JSR:
case Constants.IFNULL: case Opcodes.IFNULL:
case Constants.IFNONNULL: case Opcodes.IFNONNULL:
methodVisitor.visitJumpInsn( methodVisitor.visitJumpInsn(
opcode, labels[currentBytecodeOffset + readShort(currentOffset + 1)]); opcode, labels[currentBytecodeOffset + readShort(currentOffset + 1)]);
currentOffset += 3; currentOffset += 3;
@ -2139,7 +2139,7 @@ public class ClassReader {
currentOffset += 4; currentOffset += 4;
} }
break; break;
case Constants.TABLESWITCH: case Opcodes.TABLESWITCH:
{ {
// Skip 0 to 3 padding bytes. // Skip 0 to 3 padding bytes.
currentOffset += 4 - (currentBytecodeOffset & 3); currentOffset += 4 - (currentBytecodeOffset & 3);
@ -2156,7 +2156,7 @@ public class ClassReader {
methodVisitor.visitTableSwitchInsn(low, high, defaultLabel, table); methodVisitor.visitTableSwitchInsn(low, high, defaultLabel, table);
break; break;
} }
case Constants.LOOKUPSWITCH: case Opcodes.LOOKUPSWITCH:
{ {
// Skip 0 to 3 padding bytes. // Skip 0 to 3 padding bytes.
currentOffset += 4 - (currentBytecodeOffset & 3); currentOffset += 4 - (currentBytecodeOffset & 3);
@ -2174,30 +2174,30 @@ public class ClassReader {
methodVisitor.visitLookupSwitchInsn(defaultLabel, keys, values); methodVisitor.visitLookupSwitchInsn(defaultLabel, keys, values);
break; break;
} }
case Constants.ILOAD: case Opcodes.ILOAD:
case Constants.LLOAD: case Opcodes.LLOAD:
case Constants.FLOAD: case Opcodes.FLOAD:
case Constants.DLOAD: case Opcodes.DLOAD:
case Constants.ALOAD: case Opcodes.ALOAD:
case Constants.ISTORE: case Opcodes.ISTORE:
case Constants.LSTORE: case Opcodes.LSTORE:
case Constants.FSTORE: case Opcodes.FSTORE:
case Constants.DSTORE: case Opcodes.DSTORE:
case Constants.ASTORE: case Opcodes.ASTORE:
case Constants.RET: case Opcodes.RET:
methodVisitor.visitVarInsn(opcode, classBuffer[currentOffset + 1] & 0xFF); methodVisitor.visitVarInsn(opcode, classBuffer[currentOffset + 1] & 0xFF);
currentOffset += 2; currentOffset += 2;
break; break;
case Constants.BIPUSH: case Opcodes.BIPUSH:
case Constants.NEWARRAY: case Opcodes.NEWARRAY:
methodVisitor.visitIntInsn(opcode, classBuffer[currentOffset + 1]); methodVisitor.visitIntInsn(opcode, classBuffer[currentOffset + 1]);
currentOffset += 2; currentOffset += 2;
break; break;
case Constants.SIPUSH: case Opcodes.SIPUSH:
methodVisitor.visitIntInsn(opcode, readShort(currentOffset + 1)); methodVisitor.visitIntInsn(opcode, readShort(currentOffset + 1));
currentOffset += 3; currentOffset += 3;
break; break;
case Constants.LDC: case Opcodes.LDC:
methodVisitor.visitLdcInsn(readConst(classBuffer[currentOffset + 1] & 0xFF, charBuffer)); methodVisitor.visitLdcInsn(readConst(classBuffer[currentOffset + 1] & 0xFF, charBuffer));
currentOffset += 2; currentOffset += 2;
break; break;
@ -2206,14 +2206,14 @@ public class ClassReader {
methodVisitor.visitLdcInsn(readConst(readUnsignedShort(currentOffset + 1), charBuffer)); methodVisitor.visitLdcInsn(readConst(readUnsignedShort(currentOffset + 1), charBuffer));
currentOffset += 3; currentOffset += 3;
break; break;
case Constants.GETSTATIC: case Opcodes.GETSTATIC:
case Constants.PUTSTATIC: case Opcodes.PUTSTATIC:
case Constants.GETFIELD: case Opcodes.GETFIELD:
case Constants.PUTFIELD: case Opcodes.PUTFIELD:
case Constants.INVOKEVIRTUAL: case Opcodes.INVOKEVIRTUAL:
case Constants.INVOKESPECIAL: case Opcodes.INVOKESPECIAL:
case Constants.INVOKESTATIC: case Opcodes.INVOKESTATIC:
case Constants.INVOKEINTERFACE: case Opcodes.INVOKEINTERFACE:
{ {
int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)]; int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)];
int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)]; int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)];
@ -2234,7 +2234,7 @@ public class ClassReader {
} }
break; break;
} }
case Constants.INVOKEDYNAMIC: case Opcodes.INVOKEDYNAMIC:
{ {
int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)]; int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)];
int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)]; int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)];
@ -2256,19 +2256,19 @@ public class ClassReader {
currentOffset += 5; currentOffset += 5;
break; break;
} }
case Constants.NEW: case Opcodes.NEW:
case Constants.ANEWARRAY: case Opcodes.ANEWARRAY:
case Constants.CHECKCAST: case Opcodes.CHECKCAST:
case Constants.INSTANCEOF: case Opcodes.INSTANCEOF:
methodVisitor.visitTypeInsn(opcode, readClass(currentOffset + 1, charBuffer)); methodVisitor.visitTypeInsn(opcode, readClass(currentOffset + 1, charBuffer));
currentOffset += 3; currentOffset += 3;
break; break;
case Constants.IINC: case Opcodes.IINC:
methodVisitor.visitIincInsn( methodVisitor.visitIincInsn(
classBuffer[currentOffset + 1] & 0xFF, classBuffer[currentOffset + 2]); classBuffer[currentOffset + 1] & 0xFF, classBuffer[currentOffset + 2]);
currentOffset += 3; currentOffset += 3;
break; break;
case Constants.MULTIANEWARRAY: case Opcodes.MULTIANEWARRAY:
methodVisitor.visitMultiANewArrayInsn( methodVisitor.visitMultiANewArrayInsn(
readClass(currentOffset + 1, charBuffer), classBuffer[currentOffset + 3] & 0xFF); readClass(currentOffset + 1, charBuffer), classBuffer[currentOffset + 3] & 0xFF);
currentOffset += 4; currentOffset += 4;

View file

@ -114,7 +114,7 @@ import the.bytecode.club.bytecodeviewer.util.*;
public class BytecodeViewer public class BytecodeViewer
{ {
/*per version*/ /*per version*/
public static final String VERSION = "2.9.22"; public static final String VERSION = "2.9.23";
public static String krakatauVersion = "12"; public static String krakatauVersion = "12";
public static String enjarifyVersion = "4"; public static String enjarifyVersion = "4";
public static final boolean BLOCK_TAB_MENU = true; public static final boolean BLOCK_TAB_MENU = true;