public class SimpleVerifier extends BasicVerifier
BasicVerifier
that performs more precise verifications.
This verifier computes exact class types, instead of using a single "object
reference" type (as done in the BasicVerifier
).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, 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, 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, INVOKEDYNAMIC_OWNER, 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, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
Constructor and Description |
---|
SimpleVerifier()
Constructs a new
SimpleVerifier . |
SimpleVerifier(Type currentClass,
Type currentSuperClass,
boolean isInterface)
Constructs a new
SimpleVerifier to verify a specific class. |
SimpleVerifier(Type currentClass,
Type currentSuperClass,
List currentClassInterfaces,
boolean isInterface)
Constructs a new
SimpleVerifier to verify a specific class. |
Modifier and Type | Method and Description |
---|---|
protected Class |
getClass(Type t) |
protected Value |
getElementValue(Value objectArrayValue) |
protected Type |
getSuperClass(Type t) |
protected boolean |
isArrayValue(Value value) |
protected boolean |
isAssignableFrom(Type t,
Type u) |
protected boolean |
isInterface(Type t) |
protected boolean |
isSubTypeOf(Value value,
Value expected) |
Value |
merge(Value v,
Value w)
Merges two values.
|
Value |
newValue(Type type)
Creates a new value that represents the given type.
|
void |
setClassLoader(ClassLoader loader)
Set the
ClassLoader which will be used to load referenced
classes. |
binaryOperation, copyOperation, naryOperation, returnOperation, ternaryOperation, unaryOperation
newOperation
public SimpleVerifier()
SimpleVerifier
.public SimpleVerifier(Type currentClass, Type currentSuperClass, boolean isInterface)
SimpleVerifier
to verify a specific class. This
class will not be loaded into the JVM since it may be incorrect.currentClass
- the class that is verified.currentSuperClass
- the super class of the class that is verified.isInterface
- if the class that is verified is an interface.public SimpleVerifier(Type currentClass, Type currentSuperClass, List currentClassInterfaces, boolean isInterface)
SimpleVerifier
to verify a specific class. This
class will not be loaded into the JVM since it may be incorrect.currentClass
- the class that is verified.currentSuperClass
- the super class of the class that is verified.currentClassInterfaces
- the interfaces implemented by the class
that is verified.isInterface
- if the class that is verified is an interface.public void setClassLoader(ClassLoader loader)
ClassLoader
which will be used to load referenced
classes. This is useful if you are verifying multiple interdependent
classes.loader
- a ClassLoader
to usepublic Value newValue(Type type)
Interpreter
this
),
exception handler variable and with null
type
for variables reserved by long and double types.newValue
in interface Interpreter
newValue
in class BasicInterpreter
type
- a primitive or reference type, or null to
represent an uninitialized value.protected boolean isArrayValue(Value value)
isArrayValue
in class BasicVerifier
protected Value getElementValue(Value objectArrayValue) throws AnalyzerException
getElementValue
in class BasicVerifier
AnalyzerException
protected boolean isSubTypeOf(Value value, Value expected)
isSubTypeOf
in class BasicVerifier
public Value merge(Value v, Value w)
Interpreter
merge
in interface Interpreter
merge
in class BasicInterpreter
v
- a value.w
- another value.protected boolean isInterface(Type t)