Class BasicVerifier

All Implemented Interfaces:
org.objectweb.asm.Opcodes
Direct Known Subclasses:
SimpleVerifier

public class BasicVerifier extends BasicInterpreter
An extended BasicInterpreter that checks that bytecode instructions are correctly used.
Author:
Eric Bruneton, Bing Ran
  • Field Summary

    Fields inherited from class org.objectweb.asm.tree.analysis.BasicInterpreter

    NULL_TYPE

    Fields inherited from class org.objectweb.asm.tree.analysis.Interpreter

    api

    Fields inherited from interface org.objectweb.asm.Opcodes

    AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V9
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
     
    Constructs a new BasicVerifier for the latest ASM API version.
    protected
    BasicVerifier(int api)
    Constructs a new BasicVerifier.
  • Method Summary

    Modifier and Type
    Method
    Description
    binaryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value1, BasicValue value2)
    Interprets a bytecode instruction with two arguments.
    copyOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value)
    Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
    protected BasicValue
    getElementValue(BasicValue objectArrayValue)
    Returns the value corresponding to the type of the elements of the given array reference value.
    protected boolean
    Returns whether the given value corresponds to an array reference.
    protected boolean
    isSubTypeOf(BasicValue value, BasicValue expected)
    Returns whether the type corresponding to the first argument is a subtype of the type corresponding to the second argument.
    naryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, List<? extends BasicValue> values)
    Interprets a bytecode instruction with a variable number of arguments.
    void
    returnOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value, BasicValue expected)
    Interprets a bytecode return instruction.
    ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value1, BasicValue value2, BasicValue value3)
    Interprets a bytecode instruction with three arguments.
    unaryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value)
    Interprets a bytecode instruction with a single argument.

    Methods inherited from class org.objectweb.asm.tree.analysis.BasicInterpreter

    merge, newOperation, newValue

    Methods inherited from class org.objectweb.asm.tree.analysis.Interpreter

    newEmptyValue, newExceptionValue, newParameterValue, newReturnTypeValue

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BasicVerifier

      public BasicVerifier()
      Constructs a new BasicVerifier for the latest ASM API version. Subclasses must not use this constructor. Instead, they must use the BasicVerifier(int) version.
    • BasicVerifier

      protected BasicVerifier(int api)
      Constructs a new BasicVerifier.
      Parameters:
      api - the ASM API version supported by this interpreter. Must be one of the ASMx values in Opcodes.
  • Method Details

    • copyOperation

      public BasicValue copyOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value) throws AnalyzerException
      Description copied from class: Interpreter
      Interprets a bytecode instruction that moves a value on the stack or to or from local variables. This method is called for the following opcodes:

      ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP

      Overrides:
      copyOperation in class BasicInterpreter
      Parameters:
      insn - the bytecode instruction to be interpreted.
      value - the value that must be moved by the instruction.
      Returns:
      the result of the interpretation of the given instruction. The returned value must be equal to the given value.
      Throws:
      AnalyzerException - if an error occurred during the interpretation.
    • unaryOperation

      public BasicValue unaryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value) throws AnalyzerException
      Description copied from class: Interpreter
      Interprets a bytecode instruction with a single argument. This method is called for the following opcodes:

      INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST, INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL

      Overrides:
      unaryOperation in class BasicInterpreter
      Parameters:
      insn - the bytecode instruction to be interpreted.
      value - the argument of the instruction to be interpreted.
      Returns:
      the result of the interpretation of the given instruction.
      Throws:
      AnalyzerException - if an error occurred during the interpretation.
    • binaryOperation

      public BasicValue binaryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value1, BasicValue value2) throws AnalyzerException
      Description copied from class: Interpreter
      Interprets a bytecode instruction with two arguments. This method is called for the following opcodes:

      IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, PUTFIELD

      Overrides:
      binaryOperation in class BasicInterpreter
      Parameters:
      insn - the bytecode instruction to be interpreted.
      value1 - the first argument of the instruction to be interpreted.
      value2 - the second argument of the instruction to be interpreted.
      Returns:
      the result of the interpretation of the given instruction.
      Throws:
      AnalyzerException - if an error occurred during the interpretation.
    • ternaryOperation

      public BasicValue ternaryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value1, BasicValue value2, BasicValue value3) throws AnalyzerException
      Description copied from class: Interpreter
      Interprets a bytecode instruction with three arguments. This method is called for the following opcodes:

      IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE

      Overrides:
      ternaryOperation in class BasicInterpreter
      Parameters:
      insn - the bytecode instruction to be interpreted.
      value1 - the first argument of the instruction to be interpreted.
      value2 - the second argument of the instruction to be interpreted.
      value3 - the third argument of the instruction to be interpreted.
      Returns:
      the result of the interpretation of the given instruction.
      Throws:
      AnalyzerException - if an error occurred during the interpretation.
    • naryOperation

      public BasicValue naryOperation(org.objectweb.asm.tree.AbstractInsnNode insn, List<? extends BasicValue> values) throws AnalyzerException
      Description copied from class: Interpreter
      Interprets a bytecode instruction with a variable number of arguments. This method is called for the following opcodes:

      INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY and INVOKEDYNAMIC

      Overrides:
      naryOperation in class BasicInterpreter
      Parameters:
      insn - the bytecode instruction to be interpreted.
      values - the arguments of the instruction to be interpreted.
      Returns:
      the result of the interpretation of the given instruction.
      Throws:
      AnalyzerException - if an error occurred during the interpretation.
    • returnOperation

      public void returnOperation(org.objectweb.asm.tree.AbstractInsnNode insn, BasicValue value, BasicValue expected) throws AnalyzerException
      Description copied from class: Interpreter
      Interprets a bytecode return instruction. This method is called for the following opcodes:

      IRETURN, LRETURN, FRETURN, DRETURN, ARETURN

      Overrides:
      returnOperation in class BasicInterpreter
      Parameters:
      insn - the bytecode instruction to be interpreted.
      value - the argument of the instruction to be interpreted.
      expected - the expected return type of the analyzed method.
      Throws:
      AnalyzerException - if an error occurred during the interpretation.
    • isArrayValue

      protected boolean isArrayValue(BasicValue value)
      Returns whether the given value corresponds to an array reference.
      Parameters:
      value - a value.
      Returns:
      whether 'value' corresponds to an array reference.
    • getElementValue

      protected BasicValue getElementValue(BasicValue objectArrayValue) throws AnalyzerException
      Returns the value corresponding to the type of the elements of the given array reference value.
      Parameters:
      objectArrayValue - a value corresponding to array of object (or array) references.
      Returns:
      the value corresponding to the type of the elements of 'objectArrayValue'.
      Throws:
      AnalyzerException - if objectArrayValue does not correspond to an array type.
    • isSubTypeOf

      protected boolean isSubTypeOf(BasicValue value, BasicValue expected)
      Returns whether the type corresponding to the first argument is a subtype of the type corresponding to the second argument.
      Parameters:
      value - a value.
      expected - another value.
      Returns:
      whether the type corresponding to 'value' is a subtype of the type corresponding to 'expected'.