📄 javaopcode.java
字号:
case ISTORE_0:
return 0;
case ISTORE_1:
return 1;
case ISTORE_2:
return 2;
case ISTORE_3:
return 3;
case LLOAD:
return code[i+1] + 1;
case LLOAD_0:
return 1;
case LLOAD_1:
return 2;
case LLOAD_2:
return 3;
case LLOAD_3:
return 4;
case LSTORE:
return code[i+1] + 1;
case LSTORE_0:
return 1;
case LSTORE_1:
return 2;
case LSTORE_2:
return 3;
case LSTORE_3:
return 4;
case IINC:
return code[i+1];
case RET:
return code[i+1];
default:
return 0;
}
}
public static int getConstantPoolIndexSize(int code)
{
switch(code) {
case LDC:
return 1;
case ANEWARRAY:
case CHECKCAST:
case GETFIELD:
case GETSTATIC:
case INSTANCEOF:
case INVOKEINTERFACE:
case INVOKESPECIAL:
case INVOKESTATIC:
case INVOKEVIRTUAL:
case LDC2_W:
case LDC_W:
case MULTIANEWARRAY:
case NEW:
case PUTFIELD:
case PUTSTATIC:
return 2;
default:
throw new IllegalStateException();
}
}
public static int getOpcodeLength(int[] code, int i)
{
switch(code[i])
{
case AALOAD:
case AASTORE:
case ACONST_NULL:
case ALOAD_0:
case ALOAD_1:
case ALOAD_2:
case ALOAD_3:
case ARETURN:
case ARRAYLENGTH:
case ASTORE_0:
case ASTORE_1:
case ASTORE_2:
case ASTORE_3:
case ATHROW:
case BALOAD:
case BASTORE:
case CALOAD:
case CASTORE:
case D2F:
case D2I:
case D2L:
case DADD:
case DALOAD:
case DASTORE:
case DCMPG:
case DCMPL:
case DCONST_0:
case DCONST_1:
case DDIV:
case DLOAD_0:
case DLOAD_1:
case DLOAD_2:
case DLOAD_3:
case DMUL:
case DNEG:
case DREM:
case DRETURN:
case DSTORE_0:
case DSTORE_1:
case DSTORE_2:
case DSTORE_3:
case DSUB:
case DUP2:
case DUP2_X1:
case DUP2_X2:
case DUP:
case DUP_X1:
case DUP_X2:
case F2D:
case F2I:
case F2L:
case FADD:
case FALOAD:
case FASTORE:
case FCMPG:
case FCMPL:
case FCONST_0:
case FCONST_1:
case FCONST_2:
case FDIV:
case FLOAD_0:
case FLOAD_1:
case FLOAD_2:
case FLOAD_3:
case FMUL:
case FNEG:
case FREM:
case FRETURN:
case FSTORE_0:
case FSTORE_1:
case FSTORE_2:
case FSTORE_3:
case FSUB:
case I2B:
case I2C:
case I2D:
case I2F:
case I2L:
case I2S:
case IADD:
case IALOAD:
case IAND:
case IASTORE:
case ICONST_0:
case ICONST_1:
case ICONST_2:
case ICONST_3:
case ICONST_4:
case ICONST_5:
case ICONST_M1:
case IDIV:
case ILOAD_0:
case ILOAD_1:
case ILOAD_2:
case ILOAD_3:
case IMUL:
case INEG:
case IOR:
case IREM:
case IRETURN:
case ISHL:
case ISHR:
case ISTORE_0:
case ISTORE_1:
case ISTORE_2:
case ISTORE_3:
case ISUB:
case IUSHR:
case IXOR:
case L2D:
case L2F:
case L2I:
case LADD:
case LALOAD:
case LAND:
case LASTORE:
case LCMP:
case LCONST_0:
case LCONST_1:
case LDIV:
case LLOAD_0:
case LLOAD_1:
case LLOAD_2:
case LLOAD_3:
case LMUL:
case LNEG:
case LOR:
case LREM:
case LRETURN:
case LSHL:
case LSHR:
case LSTORE_0:
case LSTORE_1:
case LSTORE_2:
case LSTORE_3:
case LSUB:
case LUSHR:
case LXOR:
case MONITORENTER:
case MONITOREXIT:
case NOP:
case POP2:
case POP:
case RETURN:
case SALOAD:
case SASTORE:
case SWAP:
return 1;
case ALOAD:
case ASTORE:
case BIPUSH:
case DLOAD:
case DSTORE:
case FLOAD:
case FSTORE:
case ILOAD:
case ISTORE:
case LDC:
case LLOAD:
case LSTORE:
case NEWARRAY:
case RET:
return 2;
case ANEWARRAY:
case CHECKCAST:
case GETFIELD:
case GETSTATIC:
case GOTO:
case IFEQ:
case IFGE:
case IFGT:
case IFLE:
case IFLT:
case IFNE:
case IFNONNULL:
case IFNULL:
case IF_ACMPEQ:
case IF_ACMPNE:
case IF_ICMPEQ:
case IF_ICMPGE:
case IF_ICMPGT:
case IF_ICMPLE:
case IF_ICMPLT:
case IF_ICMPNE:
case IINC:
case INSTANCEOF:
case INVOKESPECIAL:
case INVOKESTATIC:
case INVOKEVIRTUAL:
case JSR:
case LDC2_W:
case LDC_W:
case NEW:
case PUTFIELD:
case PUTSTATIC:
case SIPUSH:
return 3;
case MULTIANEWARRAY:
return 4;
case GOTO_W:
case INVOKEINTERFACE:
case JSR_W:
return 5;
case LOOKUPSWITCH:
return getLookupSwitchLength(code, i);
case TABLESWITCH:
return getTableSwitchLength(code, i);
case WIDE:
if (code[i+1] == IINC)
return 6;
return 4;
default:
// reserved instrs -- shouldn't really be here....
System.err.println("Java Opcode - getOpcodeLength - reserved instrution!");
return 1;
}
}
private static int getLookupSwitchLength(int[] code, int i)
{
int initPosition = i;
// skip the zeros
for(i = (initPosition + 1); i < (initPosition + 5); i++)
if ((i % 4) == 0)
break;
// skip the default byte
i += 4;
// read the number of pairs
int npairs = (code[i] << 24) | (code[i+1] << 16) | (code[i+2] << 8) | (code[i+3]);
i += 4;
// skip the pairs
i += 8 * npairs;
return i - initPosition;
}
private static int getTableSwitchLength(int[] code, int i)
{
int initPosition = i;
// skip the zeros
for(i = (initPosition + 1); i < (initPosition + 4); i++)
if ((i % 4) == 0)
break;
// skip the default byte
i += 4;
// read the lowbyte
int low = (code[i] << 24) | (code[i+1] << 16) | (code[i+2] << 8) | (code[i+3]);
i += 4;
// read the highbyte
int high = (code[i] << 24) | (code[i+1] << 16) | (code[i+2] << 8) | (code[i+3]);
i += 4;
// skip the table
i += 4 * (high - low + 1);
return i - initPosition;
}
/*
case NOP:
case ACONST_NULL:
case ICONST_M1:
case ICONST_0:
case ICONST_1:
case ICONST_2:
case ICONST_3:
case ICONST_4:
case ICONST_5:
case LCONST_0:
case LCONST_1:
case FCONST_0:
case FCONST_1:
case FCONST_2:
case DCONST_0:
case DCONST_1:
case BIPUSH:
case SIPUSH:
case LDC:
case LDC_W:
case LDC2_W:
case ILOAD:
case LLOAD:
case FLOAD:
case DLOAD:
case ALOAD:
case ILOAD_0:
case ILOAD_1:
case ILOAD_2:
case ILOAD_3:
case LLOAD_0:
case LLOAD_1:
case LLOAD_2:
case LLOAD_3:
case FLOAD_0:
case FLOAD_1:
case FLOAD_2:
case FLOAD_3:
case DLOAD_0:
case DLOAD_1:
case DLOAD_2:
case DLOAD_3:
case ALOAD_0:
case ALOAD_1:
case ALOAD_2:
case ALOAD_3:
case IALOAD:
case LALOAD:
case FALOAD:
case DALOAD:
case AALOAD:
case BALOAD:
case CALOAD:
case SALOAD:
case ISTORE:
case LSTORE:
case FSTORE:
case DSTORE:
case ASTORE:
case ISTORE_0:
case ISTORE_1:
case ISTORE_2:
case ISTORE_3:
case LSTORE_0:
case LSTORE_1:
case LSTORE_2:
case LSTORE_3:
case FSTORE_0:
case FSTORE_1:
case FSTORE_2:
case FSTORE_3:
case DSTORE_0:
case DSTORE_1:
case DSTORE_2:
case DSTORE_3:
case ASTORE_0:
case ASTORE_1:
case ASTORE_2:
case ASTORE_3:
case IASTORE:
case LASTORE:
case FASTORE:
case DASTORE:
case AASTORE:
case BASTORE:
case CASTORE:
case SASTORE:
case POP:
case POP2:
case DUP:
case DUP_X1:
case DUP_X2:
case DUP2:
case DUP2_X1:
case DUP2_X2:
case SWAP:
case IADD:
case LADD:
case FADD:
case DADD:
case ISUB:
case LSUB:
case FSUB:
case DSUB:
case IMUL:
case LMUL:
case FMUL:
case DMUL:
case IDIV:
case LDIV:
case FDIV:
case DDIV:
case IREM:
case LREM:
case FREM:
case DREM:
case INEG:
case LNEG:
case FNEG:
case DNEG:
case ISHL:
case LSHL:
case ISHR:
case LSHR:
case IUSHR:
case LUSHR:
case IAND:
case LAND:
case IOR:
case LOR:
case IXOR:
case LXOR:
case IINC:
case I2L:
case I2F:
case I2D:
case L2I:
case L2F:
case L2D:
case F2I:
case F2L:
case F2D:
case D2I:
case D2L:
case D2F:
case I2B:
case I2C:
case I2S:
case LCMP:
case FCMPL:
case FCMPG:
case DCMPL:
case DCMPG:
case IFEQ:
case IFNE:
case IFLT:
case IFGE:
case IFGT:
case IFLE:
case IF_ICMPEQ:
case IF_ICMPNE:
case IF_ICMPLT:
case IF_ICMPGE:
case IF_ICMPGT:
case IF_ICMPLE:
case IF_ACMPEQ:
case IF_ACMPNE:
case GOTO:
case JSR:
case RET:
case TABLESWITCH:
case LOOKUPSWITCH:
case IRETURN:
case LRETURN:
case FRETURN:
case DRETURN:
case ARETURN:
case RETURN:
case GETSTATIC:
case PUTSTATIC:
case GETFIELD:
case PUTFIELD:
case INVOKEVIRTUAL:
case INVOKESPECIAL:
case INVOKESTATIC:
case INVOKEINTERFACE:
case XXXUNUSEDXXX:
case NEW:
case NEWARRAY:
case ANEWARRAY:
case ARRAYLENGTH:
case ATHROW:
case CHECKCAST:
case INSTANCEOF:
case MONITORENTER:
case MONITOREXIT:
case WIDE:
case MULTIANEWARRAY:
case IFNULL:
case IFNONNULL:
case GOTO_W:
case JSR_W:
case BREAKPOINT:
case IMPDEP1:
case IMPDEP2:
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -