public class DexCFG extends AbstractCFG<Instruction,DexCFG.BasicBlock> implements BytecodeCFG
Modifier and Type | Class and Description |
---|---|
class |
DexCFG.BasicBlock |
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_MethodRef, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_String, CONSTANT_Utf8, indexedTypes, indexedTypes_T, MAYBE, NO, OP_aaload, OP_aastore, OP_aconst_null, OP_aload, OP_aload_0, OP_aload_1, OP_aload_2, OP_aload_3, OP_anewarray, OP_areturn, OP_arraylength, OP_astore, OP_astore_0, OP_astore_1, OP_astore_2, OP_astore_3, OP_athrow, OP_baload, OP_bastore, OP_bipush, OP_caload, OP_castore, OP_checkcast, OP_d2f, OP_d2i, OP_d2l, OP_dadd, OP_daload, OP_dastore, OP_dcmpg, OP_dcmpl, OP_dconst_0, OP_dconst_1, OP_ddiv, OP_dload, OP_dload_0, OP_dload_1, OP_dload_2, OP_dload_3, OP_dmul, OP_dneg, OP_drem, OP_dreturn, OP_dstore, OP_dstore_0, OP_dstore_1, OP_dstore_2, OP_dstore_3, OP_dsub, OP_dup, OP_dup_x1, OP_dup_x2, OP_dup2, OP_dup2_x1, OP_dup2_x2, OP_f2d, OP_f2i, OP_f2l, OP_fadd, OP_faload, OP_fastore, OP_fcmpg, OP_fcmpl, OP_fconst_0, OP_fconst_1, OP_fconst_2, OP_fdiv, OP_fload, OP_fload_0, OP_fload_1, OP_fload_2, OP_fload_3, OP_fmul, OP_fneg, OP_frem, OP_freturn, OP_fstore, OP_fstore_0, OP_fstore_1, OP_fstore_2, OP_fstore_3, OP_fsub, OP_getfield, OP_getstatic, OP_goto, OP_goto_w, OP_i2b, OP_i2c, OP_i2d, OP_i2f, OP_i2l, OP_i2s, OP_iadd, OP_iaload, OP_iand, OP_iastore, OP_iconst_0, OP_iconst_1, OP_iconst_2, OP_iconst_3, OP_iconst_4, OP_iconst_5, OP_iconst_m1, OP_idiv, OP_if_acmpeq, OP_if_acmpne, OP_if_icmpeq, OP_if_icmpge, OP_if_icmpgt, OP_if_icmple, OP_if_icmplt, OP_if_icmpne, OP_ifeq, OP_ifge, OP_ifgt, OP_ifle, OP_iflt, OP_ifne, OP_ifnonnull, OP_ifnull, OP_iinc, OP_iload, OP_iload_0, OP_iload_1, OP_iload_2, OP_iload_3, OP_imul, OP_ineg, OP_instanceof, OP_invokedynamic, OP_invokeinterface, OP_invokespecial, OP_invokestatic, OP_invokevirtual, OP_ior, OP_irem, OP_ireturn, OP_ishl, OP_ishr, OP_istore, OP_istore_0, OP_istore_1, OP_istore_2, OP_istore_3, OP_isub, OP_iushr, OP_ixor, OP_jsr, OP_jsr_w, OP_l2d, OP_l2f, OP_l2i, OP_ladd, OP_laload, OP_land, OP_lastore, OP_lcmp, OP_lconst_0, OP_lconst_1, OP_ldc, OP_ldc_w, OP_ldc2_w, OP_ldiv, OP_lload, OP_lload_0, OP_lload_1, OP_lload_2, OP_lload_3, OP_lmul, OP_lneg, OP_lookupswitch, OP_lor, OP_lrem, OP_lreturn, OP_lshl, OP_lshr, OP_lstore, OP_lstore_0, OP_lstore_1, OP_lstore_2, OP_lstore_3, OP_lsub, OP_lushr, OP_lxor, OP_monitorenter, OP_monitorexit, OP_multianewarray, OP_new, OP_newarray, OP_nop, OP_pop, OP_pop2, OP_putfield, OP_putstatic, OP_ret, OP_return, OP_saload, OP_sastore, OP_sipush, OP_swap, OP_tableswitch, OP_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TYPE_boolean, TYPE_boolean_index, TYPE_byte, TYPE_byte_index, TYPE_char, TYPE_char_index, TYPE_Class, TYPE_double, TYPE_double_index, TYPE_Error, TYPE_Exception, TYPE_float, TYPE_float_index, TYPE_int, TYPE_int_index, TYPE_long, TYPE_long_index, TYPE_MethodHandle, TYPE_MethodType, TYPE_null, TYPE_Object, TYPE_Object_index, TYPE_RuntimeException, TYPE_short, TYPE_short_index, TYPE_String, TYPE_Throwable, TYPE_unknown, TYPE_void, YES
Modifier | Constructor and Description |
---|---|
protected |
DexCFG(DexIMethod method,
Context context) |
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object o) |
DexCFG.BasicBlock |
getBlockForInstruction(int index)
Return an instruction's basic block in the CFG given the index of the instruction in the CFG's instruction array.
|
DexIMethod |
getDexMethod() |
Set<ExceptionHandler> |
getExceptionHandlers() |
Instruction[] |
getInstructions() |
int |
getMaxLocals() |
int |
getMaxStackHeight() |
int |
getProgramCounter(int index)
TODO: move this into IR?
|
static int |
getTotalEdges() |
int |
hashCode() |
String |
toString() |
addEdge, addExceptionalEdge, addNode, addNormalEdge, containsNode, entry, exit, getCatchBlocks, getExceptionalPredecessors, getExceptionalSuccessors, getExceptionalToExit, getMaxNumber, getMethod, getNode, getNormalPredecessors, getNormalSuccessors, getNormalToExit, getNumber, getNumberOfExceptionalIn, getNumberOfExceptionalOut, getNumberOfExceptionalOut, getNumberOfNodes, getNumberOfNormalIn, getNumberOfNormalOut, getPredNodeCount, getPredNodeNumbers, getPredNodes, getSuccNodeCount, getSuccNodeNumbers, getSuccNodes, hasEdge, hasExceptionalEdge, hasNormalEdge, init, isCatchBlock, iterateNodes, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, setCatchBlock
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
forEach, spliterator
protected DexCFG(DexIMethod method, Context context) throws IllegalArgumentException
IllegalArgumentException
public DexIMethod getDexMethod()
public static int getTotalEdges()
public int hashCode()
hashCode
in class AbstractCFG<Instruction,DexCFG.BasicBlock>
public boolean equals(Object o)
equals
in class AbstractCFG<Instruction,DexCFG.BasicBlock>
public Instruction[] getInstructions()
getInstructions
in interface ControlFlowGraph<Instruction,DexCFG.BasicBlock>
public DexCFG.BasicBlock getBlockForInstruction(int index)
getBlockForInstruction
in interface ControlFlowGraph<Instruction,DexCFG.BasicBlock>
index
- an instruction indexpublic String toString()
toString
in class AbstractCFG<Instruction,DexCFG.BasicBlock>
public int getMaxStackHeight()
public int getMaxLocals()
public Set<ExceptionHandler> getExceptionHandlers()
getExceptionHandlers
in interface BytecodeCFG
public int getProgramCounter(int index)
ControlFlowGraph
getProgramCounter
in interface ControlFlowGraph<Instruction,DexCFG.BasicBlock>
index
- an instruction index