⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 instructionfactory.java

📁 j2me 混淆包,用于混淆j2me的原代码用的
💻 JAVA
字号:
/* $Id: InstructionFactory.java,v 1.5 2004/08/21 21:37:28 eric Exp $ * * ProGuard -- shrinking, optimization, and obfuscation of Java class files. * * Copyright (c) 2002-2004 Eric Lafortune (eric@graphics.cornell.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package proguard.classfile.instruction;/** * This class provides methods to create and reuse Instruction objects. * * @author Eric Lafortune */public class InstructionFactory{    // Shared copies of Instruction objects, to avoid creating a lot of objects.    private static final SimpleInstruction       simpleInstruction       = new SimpleInstruction();    private static final CpInstruction           cpInstruction           = new CpInstruction();    private static final VariableInstruction     variableInstruction     = new VariableInstruction();    private static final BranchInstruction       branchInstruction       = new BranchInstruction();    private static final TableSwitchInstruction  tableSwitchInstruction  = new TableSwitchInstruction();    private static final LookUpSwitchInstruction lookUpSwitchInstruction = new LookUpSwitchInstruction();    /**     * Creates a new Instruction from the data in the byte array, starting     * at the given index.     */    public static Instruction create(byte[] code, int offset)    {        // We'll re-use the static Instruction objects.        Instruction instruction;        int  index  = offset;        byte opcode = code[index++];        boolean wide = false;        if (opcode == InstructionConstants.OP_WIDE)        {            opcode = code[index++];            wide   = true;        }        switch (opcode)        {            // Simple instructions.            case InstructionConstants.OP_NOP:            case InstructionConstants.OP_ACONST_NULL:            case InstructionConstants.OP_ICONST_M1:            case InstructionConstants.OP_ICONST_0:            case InstructionConstants.OP_ICONST_1:            case InstructionConstants.OP_ICONST_2:            case InstructionConstants.OP_ICONST_3:            case InstructionConstants.OP_ICONST_4:            case InstructionConstants.OP_ICONST_5:            case InstructionConstants.OP_LCONST_0:            case InstructionConstants.OP_LCONST_1:            case InstructionConstants.OP_FCONST_0:            case InstructionConstants.OP_FCONST_1:            case InstructionConstants.OP_FCONST_2:            case InstructionConstants.OP_DCONST_0:            case InstructionConstants.OP_DCONST_1:            case InstructionConstants.OP_BIPUSH:            case InstructionConstants.OP_SIPUSH:            case InstructionConstants.OP_IALOAD:            case InstructionConstants.OP_LALOAD:            case InstructionConstants.OP_FALOAD:            case InstructionConstants.OP_DALOAD:            case InstructionConstants.OP_AALOAD:            case InstructionConstants.OP_BALOAD:            case InstructionConstants.OP_CALOAD:            case InstructionConstants.OP_SALOAD:            case InstructionConstants.OP_IASTORE:            case InstructionConstants.OP_LASTORE:            case InstructionConstants.OP_FASTORE:            case InstructionConstants.OP_DASTORE:            case InstructionConstants.OP_AASTORE:            case InstructionConstants.OP_BASTORE:            case InstructionConstants.OP_CASTORE:            case InstructionConstants.OP_SASTORE:            case InstructionConstants.OP_POP:            case InstructionConstants.OP_POP2:            case InstructionConstants.OP_DUP:            case InstructionConstants.OP_DUP_X1:            case InstructionConstants.OP_DUP_X2:            case InstructionConstants.OP_DUP2:            case InstructionConstants.OP_DUP2_X1:            case InstructionConstants.OP_DUP2_X2:            case InstructionConstants.OP_SWAP:            case InstructionConstants.OP_IADD:            case InstructionConstants.OP_LADD:            case InstructionConstants.OP_FADD:            case InstructionConstants.OP_DADD:            case InstructionConstants.OP_ISUB:            case InstructionConstants.OP_LSUB:            case InstructionConstants.OP_FSUB:            case InstructionConstants.OP_DSUB:            case InstructionConstants.OP_IMUL:            case InstructionConstants.OP_LMUL:            case InstructionConstants.OP_FMUL:            case InstructionConstants.OP_DMUL:            case InstructionConstants.OP_IDIV:            case InstructionConstants.OP_LDIV:            case InstructionConstants.OP_FDIV:            case InstructionConstants.OP_DDIV:            case InstructionConstants.OP_IREM:            case InstructionConstants.OP_LREM:            case InstructionConstants.OP_FREM:            case InstructionConstants.OP_DREM:            case InstructionConstants.OP_INEG:            case InstructionConstants.OP_LNEG:            case InstructionConstants.OP_FNEG:            case InstructionConstants.OP_DNEG:            case InstructionConstants.OP_ISHL:            case InstructionConstants.OP_LSHL:            case InstructionConstants.OP_ISHR:            case InstructionConstants.OP_LSHR:            case InstructionConstants.OP_IUSHR:            case InstructionConstants.OP_LUSHR:            case InstructionConstants.OP_IAND:            case InstructionConstants.OP_LAND:            case InstructionConstants.OP_IOR:            case InstructionConstants.OP_LOR:            case InstructionConstants.OP_IXOR:            case InstructionConstants.OP_LXOR:            case InstructionConstants.OP_I2L:            case InstructionConstants.OP_I2F:            case InstructionConstants.OP_I2D:            case InstructionConstants.OP_L2I:            case InstructionConstants.OP_L2F:            case InstructionConstants.OP_L2D:            case InstructionConstants.OP_F2I:            case InstructionConstants.OP_F2L:            case InstructionConstants.OP_F2D:            case InstructionConstants.OP_D2I:            case InstructionConstants.OP_D2L:            case InstructionConstants.OP_D2F:            case InstructionConstants.OP_I2B:            case InstructionConstants.OP_I2C:            case InstructionConstants.OP_I2S:            case InstructionConstants.OP_LCMP:            case InstructionConstants.OP_FCMPL:            case InstructionConstants.OP_FCMPG:            case InstructionConstants.OP_DCMPL:            case InstructionConstants.OP_DCMPG:            case InstructionConstants.OP_IRETURN:            case InstructionConstants.OP_LRETURN:            case InstructionConstants.OP_FRETURN:            case InstructionConstants.OP_DRETURN:            case InstructionConstants.OP_ARETURN:            case InstructionConstants.OP_RETURN:            case InstructionConstants.OP_NEWARRAY:            case InstructionConstants.OP_ARRAYLENGTH:            case InstructionConstants.OP_ATHROW:            case InstructionConstants.OP_MONITORENTER:            case InstructionConstants.OP_MONITOREXIT:                instruction = simpleInstruction;                break;            // Instructions with a contant pool index.            case InstructionConstants.OP_LDC:            case InstructionConstants.OP_LDC_W:            case InstructionConstants.OP_LDC2_W:            case InstructionConstants.OP_GETSTATIC:            case InstructionConstants.OP_PUTSTATIC:            case InstructionConstants.OP_GETFIELD:            case InstructionConstants.OP_PUTFIELD:            case InstructionConstants.OP_INVOKEVIRTUAL:            case InstructionConstants.OP_INVOKESPECIAL:            case InstructionConstants.OP_INVOKESTATIC:            case InstructionConstants.OP_INVOKEINTERFACE:            case InstructionConstants.OP_NEW:            case InstructionConstants.OP_ANEWARRAY:            case InstructionConstants.OP_CHECKCAST:            case InstructionConstants.OP_INSTANCEOF:            case InstructionConstants.OP_MULTIANEWARRAY:                instruction = cpInstruction;                break;            // Instructions with a local variable index.            case InstructionConstants.OP_ILOAD:            case InstructionConstants.OP_LLOAD:            case InstructionConstants.OP_FLOAD:            case InstructionConstants.OP_DLOAD:            case InstructionConstants.OP_ALOAD:            case InstructionConstants.OP_ILOAD_0:            case InstructionConstants.OP_ILOAD_1:            case InstructionConstants.OP_ILOAD_2:            case InstructionConstants.OP_ILOAD_3:            case InstructionConstants.OP_LLOAD_0:            case InstructionConstants.OP_LLOAD_1:            case InstructionConstants.OP_LLOAD_2:            case InstructionConstants.OP_LLOAD_3:            case InstructionConstants.OP_FLOAD_0:            case InstructionConstants.OP_FLOAD_1:            case InstructionConstants.OP_FLOAD_2:            case InstructionConstants.OP_FLOAD_3:            case InstructionConstants.OP_DLOAD_0:            case InstructionConstants.OP_DLOAD_1:            case InstructionConstants.OP_DLOAD_2:            case InstructionConstants.OP_DLOAD_3:            case InstructionConstants.OP_ALOAD_0:            case InstructionConstants.OP_ALOAD_1:            case InstructionConstants.OP_ALOAD_2:            case InstructionConstants.OP_ALOAD_3:            case InstructionConstants.OP_ISTORE:            case InstructionConstants.OP_LSTORE:            case InstructionConstants.OP_FSTORE:            case InstructionConstants.OP_DSTORE:            case InstructionConstants.OP_ASTORE:            case InstructionConstants.OP_ISTORE_0:            case InstructionConstants.OP_ISTORE_1:            case InstructionConstants.OP_ISTORE_2:            case InstructionConstants.OP_ISTORE_3:            case InstructionConstants.OP_LSTORE_0:            case InstructionConstants.OP_LSTORE_1:            case InstructionConstants.OP_LSTORE_2:            case InstructionConstants.OP_LSTORE_3:            case InstructionConstants.OP_FSTORE_0:            case InstructionConstants.OP_FSTORE_1:            case InstructionConstants.OP_FSTORE_2:            case InstructionConstants.OP_FSTORE_3:            case InstructionConstants.OP_DSTORE_0:            case InstructionConstants.OP_DSTORE_1:            case InstructionConstants.OP_DSTORE_2:            case InstructionConstants.OP_DSTORE_3:            case InstructionConstants.OP_ASTORE_0:            case InstructionConstants.OP_ASTORE_1:            case InstructionConstants.OP_ASTORE_2:            case InstructionConstants.OP_ASTORE_3:            case InstructionConstants.OP_IINC:            case InstructionConstants.OP_RET:                variableInstruction.wide = wide;                instruction = variableInstruction;                break;            // Instructions with a branch offset operand.            case InstructionConstants.OP_IFEQ:            case InstructionConstants.OP_IFNE:            case InstructionConstants.OP_IFLT:            case InstructionConstants.OP_IFGE:            case InstructionConstants.OP_IFGT:            case InstructionConstants.OP_IFLE:            case InstructionConstants.OP_IFICMPEQ:            case InstructionConstants.OP_IFICMPNE:            case InstructionConstants.OP_IFICMPLT:            case InstructionConstants.OP_IFICMPGE:            case InstructionConstants.OP_IFICMPGT:            case InstructionConstants.OP_IFICMPLE:            case InstructionConstants.OP_IFACMPEQ:            case InstructionConstants.OP_IFACMPNE:            case InstructionConstants.OP_GOTO:            case InstructionConstants.OP_JSR:            case InstructionConstants.OP_IFNULL:            case InstructionConstants.OP_IFNONNULL:            case InstructionConstants.OP_GOTO_W:            case InstructionConstants.OP_JSR_W:                instruction = branchInstruction;                break;            //  The tableswitch instruction.            case InstructionConstants.OP_TABLESWITCH:                instruction = tableSwitchInstruction;                break;            //  The lookupswitch instruction.            case InstructionConstants.OP_LOOKUPSWITCH:                instruction = lookUpSwitchInstruction;                break;            default:                throw new IllegalArgumentException("Unknown instruction ["+opcode+"] at offset "+offset);        }        instruction.opcode = opcode;        instruction.readInfo(code, index);        return instruction;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -