org.objectweb.asm.tree.analysis

Class BasicVerifier

Implemented Interfaces:
Interpreter, Opcodes
Known Direct Subclasses:
SimpleVerifier

public class BasicVerifier
extends BasicInterpreter

An extended BasicInterpreter that checks that bytecode instructions are correctly used.
Authors:
Eric Bruneton
Bing Ran

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_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, 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, DUP2, DUP2_X1, DUP2_X2, DUP_X1, DUP_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, GETFIELD, GETSTATIC, GOTO, 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, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, 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, SWAP, TABLESWITCH, TOP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6

Method Summary

Value
binaryOperation(AbstractInsnNode insn, Value value1, Value value2)
Interprets a bytecode instruction with two arguments.
Value
copyOperation(AbstractInsnNode insn, Value value)
Interprets a bytecode instruction that moves a value on the stack or to or from local variables.
protected Value
getElementValue(Value objectArrayValue)
protected boolean
isArrayValue(Value value)
protected boolean
isSubTypeOf(Value value, Value expected)
Value
naryOperation(AbstractInsnNode insn, List values)
Interprets a bytecode instruction with a variable number of arguments.
Value
ternaryOperation(AbstractInsnNode insn, Value value1, Value value2, Value value3)
Interprets a bytecode instruction with three arguments.
Value
unaryOperation(AbstractInsnNode insn, Value value)
Interprets a bytecode instruction with a single argument.

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

binaryOperation, copyOperation, merge, naryOperation, newOperation, newValue, ternaryOperation, unaryOperation

Method Details

binaryOperation

public Value binaryOperation(AbstractInsnNode insn,
                             Value value1,
                             Value value2)
            throws AnalyzerException
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
Specified by:
binaryOperation in interface Interpreter
Overrides:
binaryOperation in interface 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 occured during the interpretation.

copyOperation

public Value copyOperation(AbstractInsnNode insn,
                           Value value)
            throws AnalyzerException
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
Specified by:
copyOperation in interface Interpreter
Overrides:
copyOperation in interface 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 occured during the interpretation.

getElementValue

protected Value getElementValue(Value objectArrayValue)
            throws AnalyzerException

isArrayValue

protected boolean isArrayValue(Value value)

isSubTypeOf

protected boolean isSubTypeOf(Value value,
                              Value expected)

naryOperation

public Value naryOperation(AbstractInsnNode insn,
                           List values)
            throws AnalyzerException
Interprets a bytecode instruction with a variable number of arguments. This method is called for the following opcodes: INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE, MULTIANEWARRAY
Specified by:
naryOperation in interface Interpreter
Overrides:
naryOperation in interface 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 occured during the interpretation.

ternaryOperation

public Value ternaryOperation(AbstractInsnNode insn,
                              Value value1,
                              Value value2,
                              Value value3)
            throws AnalyzerException
Interprets a bytecode instruction with three arguments. This method is called for the following opcodes: IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
Specified by:
ternaryOperation in interface Interpreter
Overrides:
ternaryOperation in interface 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 occured during the interpretation.

unaryOperation

public Value unaryOperation(AbstractInsnNode insn,
                            Value value)
            throws AnalyzerException
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
Specified by:
unaryOperation in interface Interpreter
Overrides:
unaryOperation in interface 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 occured during the interpretation.