类 Instruction

java.lang.Object
proguard.classfile.instruction.Instruction
直接已知子类:
BranchInstruction, CodeAttributeEditor.Label, ConstantInstruction, InstructionSequenceReplacer.Label, SimpleInstruction, SwitchInstruction, VariableInstruction

public abstract class Instruction extends Object
Base class for representing instructions.
  • 字段详细资料

    • OP_NOP

      public static final byte OP_NOP
      另请参阅:
    • OP_ACONST_NULL

      public static final byte OP_ACONST_NULL
      另请参阅:
    • OP_ICONST_M1

      public static final byte OP_ICONST_M1
      另请参阅:
    • OP_ICONST_0

      public static final byte OP_ICONST_0
      另请参阅:
    • OP_ICONST_1

      public static final byte OP_ICONST_1
      另请参阅:
    • OP_ICONST_2

      public static final byte OP_ICONST_2
      另请参阅:
    • OP_ICONST_3

      public static final byte OP_ICONST_3
      另请参阅:
    • OP_ICONST_4

      public static final byte OP_ICONST_4
      另请参阅:
    • OP_ICONST_5

      public static final byte OP_ICONST_5
      另请参阅:
    • OP_LCONST_0

      public static final byte OP_LCONST_0
      另请参阅:
    • OP_LCONST_1

      public static final byte OP_LCONST_1
      另请参阅:
    • OP_FCONST_0

      public static final byte OP_FCONST_0
      另请参阅:
    • OP_FCONST_1

      public static final byte OP_FCONST_1
      另请参阅:
    • OP_FCONST_2

      public static final byte OP_FCONST_2
      另请参阅:
    • OP_DCONST_0

      public static final byte OP_DCONST_0
      另请参阅:
    • OP_DCONST_1

      public static final byte OP_DCONST_1
      另请参阅:
    • OP_BIPUSH

      public static final byte OP_BIPUSH
      另请参阅:
    • OP_SIPUSH

      public static final byte OP_SIPUSH
      另请参阅:
    • OP_LDC

      public static final byte OP_LDC
      另请参阅:
    • OP_LDC_W

      public static final byte OP_LDC_W
      另请参阅:
    • OP_LDC2_W

      public static final byte OP_LDC2_W
      另请参阅:
    • OP_ILOAD

      public static final byte OP_ILOAD
      另请参阅:
    • OP_LLOAD

      public static final byte OP_LLOAD
      另请参阅:
    • OP_FLOAD

      public static final byte OP_FLOAD
      另请参阅:
    • OP_DLOAD

      public static final byte OP_DLOAD
      另请参阅:
    • OP_ALOAD

      public static final byte OP_ALOAD
      另请参阅:
    • OP_ILOAD_0

      public static final byte OP_ILOAD_0
      另请参阅:
    • OP_ILOAD_1

      public static final byte OP_ILOAD_1
      另请参阅:
    • OP_ILOAD_2

      public static final byte OP_ILOAD_2
      另请参阅:
    • OP_ILOAD_3

      public static final byte OP_ILOAD_3
      另请参阅:
    • OP_LLOAD_0

      public static final byte OP_LLOAD_0
      另请参阅:
    • OP_LLOAD_1

      public static final byte OP_LLOAD_1
      另请参阅:
    • OP_LLOAD_2

      public static final byte OP_LLOAD_2
      另请参阅:
    • OP_LLOAD_3

      public static final byte OP_LLOAD_3
      另请参阅:
    • OP_FLOAD_0

      public static final byte OP_FLOAD_0
      另请参阅:
    • OP_FLOAD_1

      public static final byte OP_FLOAD_1
      另请参阅:
    • OP_FLOAD_2

      public static final byte OP_FLOAD_2
      另请参阅:
    • OP_FLOAD_3

      public static final byte OP_FLOAD_3
      另请参阅:
    • OP_DLOAD_0

      public static final byte OP_DLOAD_0
      另请参阅:
    • OP_DLOAD_1

      public static final byte OP_DLOAD_1
      另请参阅:
    • OP_DLOAD_2

      public static final byte OP_DLOAD_2
      另请参阅:
    • OP_DLOAD_3

      public static final byte OP_DLOAD_3
      另请参阅:
    • OP_ALOAD_0

      public static final byte OP_ALOAD_0
      另请参阅:
    • OP_ALOAD_1

      public static final byte OP_ALOAD_1
      另请参阅:
    • OP_ALOAD_2

      public static final byte OP_ALOAD_2
      另请参阅:
    • OP_ALOAD_3

      public static final byte OP_ALOAD_3
      另请参阅:
    • OP_IALOAD

      public static final byte OP_IALOAD
      另请参阅:
    • OP_LALOAD

      public static final byte OP_LALOAD
      另请参阅:
    • OP_FALOAD

      public static final byte OP_FALOAD
      另请参阅:
    • OP_DALOAD

      public static final byte OP_DALOAD
      另请参阅:
    • OP_AALOAD

      public static final byte OP_AALOAD
      另请参阅:
    • OP_BALOAD

      public static final byte OP_BALOAD
      另请参阅:
    • OP_CALOAD

      public static final byte OP_CALOAD
      另请参阅:
    • OP_SALOAD

      public static final byte OP_SALOAD
      另请参阅:
    • OP_ISTORE

      public static final byte OP_ISTORE
      另请参阅:
    • OP_LSTORE

      public static final byte OP_LSTORE
      另请参阅:
    • OP_FSTORE

      public static final byte OP_FSTORE
      另请参阅:
    • OP_DSTORE

      public static final byte OP_DSTORE
      另请参阅:
    • OP_ASTORE

      public static final byte OP_ASTORE
      另请参阅:
    • OP_ISTORE_0

      public static final byte OP_ISTORE_0
      另请参阅:
    • OP_ISTORE_1

      public static final byte OP_ISTORE_1
      另请参阅:
    • OP_ISTORE_2

      public static final byte OP_ISTORE_2
      另请参阅:
    • OP_ISTORE_3

      public static final byte OP_ISTORE_3
      另请参阅:
    • OP_LSTORE_0

      public static final byte OP_LSTORE_0
      另请参阅:
    • OP_LSTORE_1

      public static final byte OP_LSTORE_1
      另请参阅:
    • OP_LSTORE_2

      public static final byte OP_LSTORE_2
      另请参阅:
    • OP_LSTORE_3

      public static final byte OP_LSTORE_3
      另请参阅:
    • OP_FSTORE_0

      public static final byte OP_FSTORE_0
      另请参阅:
    • OP_FSTORE_1

      public static final byte OP_FSTORE_1
      另请参阅:
    • OP_FSTORE_2

      public static final byte OP_FSTORE_2
      另请参阅:
    • OP_FSTORE_3

      public static final byte OP_FSTORE_3
      另请参阅:
    • OP_DSTORE_0

      public static final byte OP_DSTORE_0
      另请参阅:
    • OP_DSTORE_1

      public static final byte OP_DSTORE_1
      另请参阅:
    • OP_DSTORE_2

      public static final byte OP_DSTORE_2
      另请参阅:
    • OP_DSTORE_3

      public static final byte OP_DSTORE_3
      另请参阅:
    • OP_ASTORE_0

      public static final byte OP_ASTORE_0
      另请参阅:
    • OP_ASTORE_1

      public static final byte OP_ASTORE_1
      另请参阅:
    • OP_ASTORE_2

      public static final byte OP_ASTORE_2
      另请参阅:
    • OP_ASTORE_3

      public static final byte OP_ASTORE_3
      另请参阅:
    • OP_IASTORE

      public static final byte OP_IASTORE
      另请参阅:
    • OP_LASTORE

      public static final byte OP_LASTORE
      另请参阅:
    • OP_FASTORE

      public static final byte OP_FASTORE
      另请参阅:
    • OP_DASTORE

      public static final byte OP_DASTORE
      另请参阅:
    • OP_AASTORE

      public static final byte OP_AASTORE
      另请参阅:
    • OP_BASTORE

      public static final byte OP_BASTORE
      另请参阅:
    • OP_CASTORE

      public static final byte OP_CASTORE
      另请参阅:
    • OP_SASTORE

      public static final byte OP_SASTORE
      另请参阅:
    • OP_POP

      public static final byte OP_POP
      另请参阅:
    • OP_POP2

      public static final byte OP_POP2
      另请参阅:
    • OP_DUP

      public static final byte OP_DUP
      另请参阅:
    • OP_DUP_X1

      public static final byte OP_DUP_X1
      另请参阅:
    • OP_DUP_X2

      public static final byte OP_DUP_X2
      另请参阅:
    • OP_DUP2

      public static final byte OP_DUP2
      另请参阅:
    • OP_DUP2_X1

      public static final byte OP_DUP2_X1
      另请参阅:
    • OP_DUP2_X2

      public static final byte OP_DUP2_X2
      另请参阅:
    • OP_SWAP

      public static final byte OP_SWAP
      另请参阅:
    • OP_IADD

      public static final byte OP_IADD
      另请参阅:
    • OP_LADD

      public static final byte OP_LADD
      另请参阅:
    • OP_FADD

      public static final byte OP_FADD
      另请参阅:
    • OP_DADD

      public static final byte OP_DADD
      另请参阅:
    • OP_ISUB

      public static final byte OP_ISUB
      另请参阅:
    • OP_LSUB

      public static final byte OP_LSUB
      另请参阅:
    • OP_FSUB

      public static final byte OP_FSUB
      另请参阅:
    • OP_DSUB

      public static final byte OP_DSUB
      另请参阅:
    • OP_IMUL

      public static final byte OP_IMUL
      另请参阅:
    • OP_LMUL

      public static final byte OP_LMUL
      另请参阅:
    • OP_FMUL

      public static final byte OP_FMUL
      另请参阅:
    • OP_DMUL

      public static final byte OP_DMUL
      另请参阅:
    • OP_IDIV

      public static final byte OP_IDIV
      另请参阅:
    • OP_LDIV

      public static final byte OP_LDIV
      另请参阅:
    • OP_FDIV

      public static final byte OP_FDIV
      另请参阅:
    • OP_DDIV

      public static final byte OP_DDIV
      另请参阅:
    • OP_IREM

      public static final byte OP_IREM
      另请参阅:
    • OP_LREM

      public static final byte OP_LREM
      另请参阅:
    • OP_FREM

      public static final byte OP_FREM
      另请参阅:
    • OP_DREM

      public static final byte OP_DREM
      另请参阅:
    • OP_INEG

      public static final byte OP_INEG
      另请参阅:
    • OP_LNEG

      public static final byte OP_LNEG
      另请参阅:
    • OP_FNEG

      public static final byte OP_FNEG
      另请参阅:
    • OP_DNEG

      public static final byte OP_DNEG
      另请参阅:
    • OP_ISHL

      public static final byte OP_ISHL
      另请参阅:
    • OP_LSHL

      public static final byte OP_LSHL
      另请参阅:
    • OP_ISHR

      public static final byte OP_ISHR
      另请参阅:
    • OP_LSHR

      public static final byte OP_LSHR
      另请参阅:
    • OP_IUSHR

      public static final byte OP_IUSHR
      另请参阅:
    • OP_LUSHR

      public static final byte OP_LUSHR
      另请参阅:
    • OP_IAND

      public static final byte OP_IAND
      另请参阅:
    • OP_LAND

      public static final byte OP_LAND
      另请参阅:
    • OP_IOR

      public static final byte OP_IOR
      另请参阅:
    • OP_LOR

      public static final byte OP_LOR
      另请参阅:
    • OP_IXOR

      public static final byte OP_IXOR
      另请参阅:
    • OP_LXOR

      public static final byte OP_LXOR
      另请参阅:
    • OP_IINC

      public static final byte OP_IINC
      另请参阅:
    • OP_I2L

      public static final byte OP_I2L
      另请参阅:
    • OP_I2F

      public static final byte OP_I2F
      另请参阅:
    • OP_I2D

      public static final byte OP_I2D
      另请参阅:
    • OP_L2I

      public static final byte OP_L2I
      另请参阅:
    • OP_L2F

      public static final byte OP_L2F
      另请参阅:
    • OP_L2D

      public static final byte OP_L2D
      另请参阅:
    • OP_F2I

      public static final byte OP_F2I
      另请参阅:
    • OP_F2L

      public static final byte OP_F2L
      另请参阅:
    • OP_F2D

      public static final byte OP_F2D
      另请参阅:
    • OP_D2I

      public static final byte OP_D2I
      另请参阅:
    • OP_D2L

      public static final byte OP_D2L
      另请参阅:
    • OP_D2F

      public static final byte OP_D2F
      另请参阅:
    • OP_I2B

      public static final byte OP_I2B
      另请参阅:
    • OP_I2C

      public static final byte OP_I2C
      另请参阅:
    • OP_I2S

      public static final byte OP_I2S
      另请参阅:
    • OP_LCMP

      public static final byte OP_LCMP
      另请参阅:
    • OP_FCMPL

      public static final byte OP_FCMPL
      另请参阅:
    • OP_FCMPG

      public static final byte OP_FCMPG
      另请参阅:
    • OP_DCMPL

      public static final byte OP_DCMPL
      另请参阅:
    • OP_DCMPG

      public static final byte OP_DCMPG
      另请参阅:
    • OP_IFEQ

      public static final byte OP_IFEQ
      另请参阅:
    • OP_IFNE

      public static final byte OP_IFNE
      另请参阅:
    • OP_IFLT

      public static final byte OP_IFLT
      另请参阅:
    • OP_IFGE

      public static final byte OP_IFGE
      另请参阅:
    • OP_IFGT

      public static final byte OP_IFGT
      另请参阅:
    • OP_IFLE

      public static final byte OP_IFLE
      另请参阅:
    • OP_IFICMPEQ

      public static final byte OP_IFICMPEQ
      另请参阅:
    • OP_IFICMPNE

      public static final byte OP_IFICMPNE
      另请参阅:
    • OP_IFICMPLT

      public static final byte OP_IFICMPLT
      另请参阅:
    • OP_IFICMPGE

      public static final byte OP_IFICMPGE
      另请参阅:
    • OP_IFICMPGT

      public static final byte OP_IFICMPGT
      另请参阅:
    • OP_IFICMPLE

      public static final byte OP_IFICMPLE
      另请参阅:
    • OP_IFACMPEQ

      public static final byte OP_IFACMPEQ
      另请参阅:
    • OP_IFACMPNE

      public static final byte OP_IFACMPNE
      另请参阅:
    • OP_GOTO

      public static final byte OP_GOTO
      另请参阅:
    • OP_JSR

      public static final byte OP_JSR
      另请参阅:
    • OP_RET

      public static final byte OP_RET
      另请参阅:
    • OP_TABLESWITCH

      public static final byte OP_TABLESWITCH
      另请参阅:
    • OP_LOOKUPSWITCH

      public static final byte OP_LOOKUPSWITCH
      另请参阅:
    • OP_IRETURN

      public static final byte OP_IRETURN
      另请参阅:
    • OP_LRETURN

      public static final byte OP_LRETURN
      另请参阅:
    • OP_FRETURN

      public static final byte OP_FRETURN
      另请参阅:
    • OP_DRETURN

      public static final byte OP_DRETURN
      另请参阅:
    • OP_ARETURN

      public static final byte OP_ARETURN
      另请参阅:
    • OP_RETURN

      public static final byte OP_RETURN
      另请参阅:
    • OP_GETSTATIC

      public static final byte OP_GETSTATIC
      另请参阅:
    • OP_PUTSTATIC

      public static final byte OP_PUTSTATIC
      另请参阅:
    • OP_GETFIELD

      public static final byte OP_GETFIELD
      另请参阅:
    • OP_PUTFIELD

      public static final byte OP_PUTFIELD
      另请参阅:
    • OP_INVOKEVIRTUAL

      public static final byte OP_INVOKEVIRTUAL
      另请参阅:
    • OP_INVOKESPECIAL

      public static final byte OP_INVOKESPECIAL
      另请参阅:
    • OP_INVOKESTATIC

      public static final byte OP_INVOKESTATIC
      另请参阅:
    • OP_INVOKEINTERFACE

      public static final byte OP_INVOKEINTERFACE
      另请参阅:
    • OP_INVOKEDYNAMIC

      public static final byte OP_INVOKEDYNAMIC
      另请参阅:
    • OP_NEW

      public static final byte OP_NEW
      另请参阅:
    • OP_NEWARRAY

      public static final byte OP_NEWARRAY
      另请参阅:
    • OP_ANEWARRAY

      public static final byte OP_ANEWARRAY
      另请参阅:
    • OP_ARRAYLENGTH

      public static final byte OP_ARRAYLENGTH
      另请参阅:
    • OP_ATHROW

      public static final byte OP_ATHROW
      另请参阅:
    • OP_CHECKCAST

      public static final byte OP_CHECKCAST
      另请参阅:
    • OP_INSTANCEOF

      public static final byte OP_INSTANCEOF
      另请参阅:
    • OP_MONITORENTER

      public static final byte OP_MONITORENTER
      另请参阅:
    • OP_MONITOREXIT

      public static final byte OP_MONITOREXIT
      另请参阅:
    • OP_WIDE

      public static final byte OP_WIDE
      另请参阅:
    • OP_MULTIANEWARRAY

      public static final byte OP_MULTIANEWARRAY
      另请参阅:
    • OP_IFNULL

      public static final byte OP_IFNULL
      另请参阅:
    • OP_IFNONNULL

      public static final byte OP_IFNONNULL
      另请参阅:
    • OP_GOTO_W

      public static final byte OP_GOTO_W
      另请参阅:
    • OP_JSR_W

      public static final byte OP_JSR_W
      另请参阅:
    • NAMES

      public static final String[] NAMES
    • ARRAY_T_BOOLEAN

      public static final byte ARRAY_T_BOOLEAN
      另请参阅:
    • ARRAY_T_CHAR

      public static final byte ARRAY_T_CHAR
      另请参阅:
    • ARRAY_T_FLOAT

      public static final byte ARRAY_T_FLOAT
      另请参阅:
    • ARRAY_T_DOUBLE

      public static final byte ARRAY_T_DOUBLE
      另请参阅:
    • ARRAY_T_BYTE

      public static final byte ARRAY_T_BYTE
      另请参阅:
    • ARRAY_T_SHORT

      public static final byte ARRAY_T_SHORT
      另请参阅:
    • ARRAY_T_INT

      public static final byte ARRAY_T_INT
      另请参阅:
    • ARRAY_T_LONG

      public static final byte ARRAY_T_LONG
      另请参阅:
    • opcode

      public byte opcode
  • 构造器详细资料

    • Instruction

      public Instruction()
  • 方法详细资料

    • equals

      public abstract boolean equals(Object o)
      覆盖:
      equals 在类中 Object
    • hashCode

      public abstract int hashCode()
      覆盖:
      hashCode 在类中 Object
    • canonicalOpcode

      public byte canonicalOpcode()
      Returns the canonical opcode of this instruction, i.e. typically the opcode whose extension has been removed.
    • actualOpcode

      public byte actualOpcode()
      Returns the actual opcode of this instruction, i.e. the opcode that is stored in the bytecode.
    • shrink

      public abstract Instruction shrink()
      Shrinks this instruction to its shortest possible form.
      返回:
      this instruction.
    • write

      public final void write(CodeAttribute codeAttribute, int offset)
      Writes the Instruction at the given offset in the given code attribute.
    • write

      public void write(byte[] code, int offset)
      Writes the Instruction at the given offset in the given code array.
    • isWide

      protected boolean isWide()
      Returns whether the instruction is wide, i.e. preceded by a wide opcode. With the current specifications, only variable instructions can be wide.
    • readInfo

      protected abstract void readInfo(byte[] code, int offset)
      Reads the data following the instruction opcode.
    • writeInfo

      protected abstract void writeInfo(byte[] code, int offset)
      Writes data following the instruction opcode.
    • length

      public abstract int length(int offset)
      Returns the length in bytes of the instruction.
    • accept

      public abstract void accept(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, InstructionVisitor instructionVisitor)
      Accepts the given visitor.
    • toString

      public String toString(Clazz clazz, int offset)
      Returns a description of the instruction, at the given offset.
    • toString

      public String toString(int offset)
      Returns a description of the instruction, at the given offset.
    • getName

      public String getName()
      Returns the name of the instruction.
    • mayThrowExceptions

      public boolean mayThrowExceptions()
      Returns whether the instruction may conservatively throw exceptions.
    • mayInstanceThrowExceptions

      public boolean mayInstanceThrowExceptions(Clazz clazz)
      Returns whether a particular instance of an instruction may throw exceptions.
    • isCategory2

      public boolean isCategory2()
      Returns whether the instruction is a Category 2 instruction. This means that it operates on long or double arguments.
    • stackPopCount

      public int stackPopCount(Clazz clazz)
      Returns the number of entries popped from the stack during the execution of the instruction.
    • stackPushCount

      public int stackPushCount(Clazz clazz)
      Returns the number of entries pushed onto the stack during the execution of the instruction.
    • stackEntryIndexBefore

      public int stackEntryIndexBefore(Clazz clazz, int stackEntryIndexAfter)
      Returns the stack entry index from which the specified stack entry is copied by a dup/swap/checkcast instruction, or -1 otherwise. Stack entry indices are counted from the top of the stack.
      • checkcast: after: 0 (before: 0 ) -- not anymore
      • dup: after: 0 0 (before: 0 )
      • dup_x1: after: 0 1 0 (before: 1 0 )
      • dup_x2: after: 0 2 1 0 (before: 2 1 0 )
      • dup2: after: 1 0 1 0 (before: 1 0 )
      • dup2_x1: after: 1 0 2 1 0 (before: 2 1 0 )
      • dup2_x2: after: 1 0 3 2 1 0 (before: 3 2 1 0)
    • readByte

      protected static int readByte(byte[] code, int offset)
    • readShort

      protected static int readShort(byte[] code, int offset)
    • readInt

      protected static int readInt(byte[] code, int offset)
    • readValue

      protected static int readValue(byte[] code, int offset, int valueSize)
    • readSignedByte

      protected static int readSignedByte(byte[] code, int offset)
    • readSignedShort

      protected static int readSignedShort(byte[] code, int offset)
    • readSignedValue

      protected static int readSignedValue(byte[] code, int offset, int valueSize)
    • writeByte

      protected static void writeByte(byte[] code, int offset, int value)
    • writeShort

      protected static void writeShort(byte[] code, int offset, int value)
    • writeInt

      protected static void writeInt(byte[] code, int offset, int value)
    • writeValue

      protected static void writeValue(byte[] code, int offset, int value, int valueSize)
    • writeSignedByte

      protected static void writeSignedByte(byte[] code, int offset, int value)
    • writeSignedShort

      protected static void writeSignedShort(byte[] code, int offset, int value)
    • writeSignedValue

      protected static void writeSignedValue(byte[] code, int offset, int value, int valueSize)