📄 code-analyse.c
字号:
STKPOP(1); INCPC(2); break; case LSTORE_0: case LSTORE_1: case LSTORE_2: case LSTORE_3: lcl = INSN(pc) - LSTORE_0; LOCALOUT_STACK(lcl, TLONG, 0); LOCALOUT_STACK(lcl+1, TVOID, 1); STKPOP(2); INCPC(1); break; case LSTORE: if (wide) { lcl = WORD(pc+1); LOCALOUT_STACK(lcl, TLONG, 0); LOCALOUT_STACK(lcl+1, TVOID, 1); INCPC(1); wide = false; } else { lcl = BYTE(pc+1); LOCALOUT_STACK(lcl, TLONG, 0); LOCALOUT_STACK(lcl+1, TVOID, 1); } STKPOP(2); INCPC(2); break; case FSTORE_0: case FSTORE_1: case FSTORE_2: case FSTORE_3: lcl = INSN(pc) - FSTORE_0; STACKIN(0, TFLOAT); LOCALOUT(lcl, TFLOAT); STKPOP(1); INCPC(1); break; case FSTORE: STACKIN(0, TFLOAT); if (wide) { LOCALOUT(WORD(pc+1), TFLOAT); INCPC(1); wide = false; } else { LOCALOUT(BYTE(pc+1), TFLOAT); } STKPOP(1); INCPC(2); break; case DSTORE_0: case DSTORE_1: case DSTORE_2: case DSTORE_3: lcl = INSN(pc) - DSTORE_0; STACKIN(0, TDOUBLE); STACKIN(1, TVOID); LOCALOUT(lcl, TDOUBLE); LOCALOUT(lcl+1, TVOID); STKPOP(2); INCPC(1); break; case DSTORE: STACKIN(0, TDOUBLE); STACKIN(1, TVOID); if (wide) { LOCALOUT(WORD(pc+1), TDOUBLE); LOCALOUT(WORD(pc+1)+1, TVOID); INCPC(1); wide = false; } else { LOCALOUT(BYTE(pc+1), TDOUBLE); LOCALOUT(BYTE(pc+1)+1, TVOID); } STKPOP(2); INCPC(2); break; case ASTORE_0: case ASTORE_1: case ASTORE_2: case ASTORE_3: lcl = INSN(pc) - ASTORE_0; LOCALOUT_STACK(lcl, TOBJ, 0); STKPOP(1); INCPC(1); break; case ASTORE: if (wide) { LOCALOUT_STACK(WORD(pc+1), TOBJ, 0); INCPC(1); wide = false; } else { LOCALOUT_STACK(BYTE(pc+1), TOBJ, 0); } STKPOP(1); INCPC(2); break; case BASTORE: STACKIN(0, TINT); STACKIN(1, TINT); STACKIN(2, TOBJ); STKPOP(3); INCPC(1); break; case IASTORE: STACKIN(0, TINT); STACKIN(1, TINT); STACKIN(2, TOBJ); STKPOP(3); INCPC(1); break; case CASTORE: case SASTORE: STACKIN(0, TINT); STACKIN(1, TINT); STACKIN(2, TOBJ); STKPOP(3); INCPC(1); break; case LASTORE: STACKIN(3, TOBJ); STACKIN(2, TINT); STACKIN(0, TLONG); STACKIN(1, TVOID); STKPOP(4); INCPC(1); break; case FASTORE: STACKIN(2, TOBJ); STACKIN(1, TINT); STACKIN(0, TFLOAT); STKPOP(3); INCPC(1); break; case DASTORE: STACKIN(3, TOBJ); STACKIN(2, TINT); STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STKPOP(4); INCPC(1); break; case AASTORE: STACKIN(2, TOBJ); STACKIN(1, TINT); STACKIN(0, TOBJ); STKPOP(3); INCPC(1); break; case POP: STKPOP(1); INCPC(1); break; case POP2: STKPOP(2); INCPC(1); break; case DUP: STKPUSH(1); STACKCOPY(1, 0); INCPC(1); break; case DUP_X1: STKPUSH(1); STACKCOPY(1, 0); STACKCOPY(2, 1); STACKCOPY(0, 2); INCPC(1); break; case DUP_X2: STKPUSH(1); STACKCOPY(1, 0); STACKCOPY(2, 1); STACKCOPY(3, 2); STACKCOPY(0, 3); INCPC(1); break; case DUP2: STKPUSH(2); STACKCOPY(2, 0); STACKCOPY(3, 1); STACKCOPY(2, 2); STACKCOPY(3, 3); INCPC(1); break; case DUP2_X1: STKPUSH(2); STACKCOPY(2, 0); STACKCOPY(3, 1); STACKCOPY(4, 2); STACKCOPY(0, 3); STACKCOPY(1, 4); INCPC(1); break; case DUP2_X2: STKPUSH(2); STACKCOPY(2, 0); STACKCOPY(3, 1); STACKCOPY(4, 2); STACKCOPY(5, 3); STACKCOPY(0, 4); STACKCOPY(1, 5); INCPC(1); break; case SWAP: STACKSWAP(0, 1); INCPC(1); break; case IAND: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IOR: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IXOR: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IADD: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IMUL: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case ISUB: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IDIV: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IREM: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case LADD: case LSUB: case LMUL: case LDIV: case LREM: case LAND: case LOR: case LXOR: STACKIN(0, TLONG); STACKIN(1, TVOID); STACKIN(2, TLONG); STACKIN(3, TVOID); STKPOP(2); STACKOUT(0, TLONG); STACKOUT(1, TVOID); INCPC(1); break; case FADD: case FSUB: case FMUL: case FDIV: case FREM: STACKIN(1, TFLOAT); STACKIN(0, TFLOAT); STKPOP(1); STACKOUT(0, TFLOAT); INCPC(1); break; case DADD: case DSUB: case DMUL: case DDIV: case DREM: STACKIN(2, TDOUBLE); STACKIN(3, TVOID); STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STKPOP(2); STACKOUT(0, TDOUBLE); STACKOUT(1, TVOID); INCPC(1); break; case INEG: STACKIN(0, TINT); STACKOUT(0, TINT); INCPC(1); break; case LNEG: STACKIN(0, TLONG); STACKIN(1, TVOID); STACKOUT(0, TLONG); STACKOUT(1, TVOID); INCPC(1); break; case FNEG: STACKIN(0, TFLOAT); STACKOUT(0, TFLOAT); INCPC(1); break; case DNEG: STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STACKOUT(0, TDOUBLE); STACKOUT(1, TVOID); INCPC(1); break; case ISHL: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case ISHR: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case IUSHR: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case LSHL: case LSHR: case LUSHR: STACKIN(0, TINT); STACKIN(1, TLONG); STACKIN(2, TVOID); STKPOP(1); STACKOUT(0, TLONG); STACKOUT(1, TVOID); INCPC(1); break; case IINC: if (wide) { LOCALINOUT(WORD(pc+1), TINT); INCPC(2); wide = false; } else { LOCALINOUT(BYTE(pc+1), TINT); } INCPC(3); break; case I2L: STACKIN(0, TINT); STKPUSH(1); STACKOUT(0, TLONG); STACKOUT(1, TVOID); INCPC(1); break; case I2F: STACKIN(0, TINT); STACKOUT(0, TFLOAT); INCPC(1); break; case I2D: STACKIN(0, TINT); STKPUSH(1); STACKOUT(0, TDOUBLE); STACKOUT(1, TVOID); INCPC(1); break; case L2I: STACKIN(0, TLONG); STACKIN(1, TVOID); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case L2F: STACKIN(0, TLONG); STACKIN(1, TVOID); STKPOP(1); STACKOUT(0, TFLOAT); INCPC(1); break; case L2D: STACKIN(0, TLONG); STACKIN(1, TVOID); STACKOUT(0, TDOUBLE); STACKOUT(1, TVOID); INCPC(1); break; case F2I: STACKIN(0, TFLOAT); STACKOUT(0, TINT); INCPC(1); break; case F2L: STACKIN(0, TFLOAT); STKPUSH(1); STACKOUT(0, TLONG); STACKOUT(1, TVOID); INCPC(1); break; case F2D: STACKIN(0, TFLOAT); STKPUSH(1); STACKOUT(0, TDOUBLE); STACKOUT(1, TVOID); INCPC(1); break; case D2I: STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case D2L: STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STACKOUT(0, TLONG); STACKOUT(1, TVOID); INCPC(1); break; case D2F: STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STKPOP(1); STACKOUT(0, TFLOAT); INCPC(1); break; case INT2BYTE: case INT2CHAR: case INT2SHORT: STACKIN(0, TINT); STACKOUT(0, TINT); INCPC(1); break; case LCMP: STACKIN(2, TLONG); STACKIN(3, TVOID); STACKIN(0, TLONG); STACKIN(1, TVOID); STKPOP(3); STACKOUT(0, TINT); INCPC(1); break; case FCMPL: case FCMPG: STACKIN(1, TFLOAT); STACKIN(0, TFLOAT); STKPOP(1); STACKOUT(0, TINT); INCPC(1); break; case DCMPL: case DCMPG: STACKIN(2, TDOUBLE); STACKIN(3, TVOID); STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STKPOP(3); STACKOUT(0, TINT); INCPC(1); break; case IFEQ: case IFNE: case IFLT: case IFGE: case IFGT: case IFLE: STACKIN(0, TINT); STKPOP(1); FRAMEMERGE(pc + WORD(pc+1), sp); FRAMEMERGE(pc + 3, sp); INCPC(3); break; case IF_ICMPEQ: case IF_ICMPNE: case IF_ICMPLT: case IF_ICMPGT: case IF_ICMPGE: case IF_ICMPLE: STACKIN(0, TINT); STACKIN(1, TINT); STKPOP(2); FRAMEMERGE(pc + WORD(pc+1), sp); FRAMEMERGE(pc + 3, sp); INCPC(3); break; case IF_ACMPEQ: case IF_ACMPNE: STACKIN(0, TOBJ); STACKIN(1, TOBJ); STKPOP(2); FRAMEMERGE(pc + WORD(pc+1), sp); FRAMEMERGE(pc + 3, sp); INCPC(3); break; case GOTO: FRAMEMERGE(pc + WORD(pc+1), sp); INCPC(3); break; case GOTO_W: FRAMEMERGE(pc + DWORD(pc+1), sp); INCPC(5); break; case JSR: STKPUSH(1); STACKOUT(0, TADDR); FRAMEMERGE(pc + WORD(pc+1), sp); STKPOP(1); FRAMEMERGE(pc + 3, sp); INCPC(3); break; case JSR_W: STKPUSH(1); STACKOUT(0, TADDR); FRAMEMERGE(pc + DWORD(pc+1), sp); STKPOP(1); FRAMEMERGE(pc + 5, sp); INCPC(5); break; case RET: LOCALIN(BYTE(pc+1), TADDR); INCPC(2); break; case LOOKUPSWITCH: STACKIN(0, TINT); STKPOP(1); tabpc = (pc + 4) & -4; idx = DWORD(tabpc+4); for (; idx > 0; idx--) { FRAMEMERGE(pc+DWORD(tabpc+idx*8+4), sp); } FRAMEMERGE(pc + DWORD(tabpc), sp); pc = tabpc + (DWORD(tabpc+4)+1) * 8; break; case TABLESWITCH: STACKIN(0, TINT); STKPOP(1); tabpc = (pc + 4) & -4; idx = DWORD(tabpc+8)-DWORD(tabpc+4)+1; for (; idx > 0; idx--) { FRAMEMERGE(pc+DWORD(tabpc+idx*4+8), sp); } FRAMEMERGE(pc + DWORD(tabpc), sp); pc = tabpc + (DWORD(tabpc+8)-DWORD(tabpc+4)+1+3) * 4; break; case IRETURN: STACKIN(0, TINT); STKPOP(1); INCPC(1); break; case LRETURN: STACKIN(0, TLONG); STACKIN(1, TVOID); STKPOP(2); INCPC(1); break; case FRETURN: STACKIN(0, TFLOAT); STKPOP(1); INCPC(1); break; case DRETURN: STACKIN(0, TDOUBLE); STACKIN(1, TVOID); STKPOP(2); INCPC(1); break; case ARETURN: STACKIN(0, TOBJ); STKPOP(1); INCPC(1); break; case RETURN: INCPC(1); break; case GETSTATIC: if (getField(WORD(pc+1), meth->class, true, &finfo, einfo) == 0) { if (!checkNoClassDefFoundError(einfo)) { failed = true; goto done; } } switch (finfo.signature->data[0]){ case 'I': case 'Z': case 'S': case 'B': case 'C': STKPUSH(1); STACKOUT(0, TINT); break; case 'F': STKPUSH(1); STACKOUT(0, TFLOAT); break; case 'J': STKPUSH(2); STACKOUT(0, TLONG); STACKOUT(1, TVOID); break; case 'D': STKPUSH(2); STACKOUT(0, TDOUBLE); STACKOUT(1, TVOID); break; case '[':
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -