Package com.ibm.wala.dalvik.classLoader
Class DexCFG
- java.lang.Object
-
- com.ibm.wala.cfg.AbstractCFG<Instruction,DexCFG.BasicBlock>
-
- com.ibm.wala.dalvik.classLoader.DexCFG
-
- All Implemented Interfaces:
BytecodeCFG
,ControlFlowGraph<Instruction,DexCFG.BasicBlock>
,Constants
,EdgeManager<DexCFG.BasicBlock>
,Graph<DexCFG.BasicBlock>
,NodeManager<DexCFG.BasicBlock>
,NumberedEdgeManager<DexCFG.BasicBlock>
,NumberedGraph<DexCFG.BasicBlock>
,NumberedNodeManager<DexCFG.BasicBlock>
,Iterable<DexCFG.BasicBlock>
public class DexCFG extends AbstractCFG<Instruction,DexCFG.BasicBlock> implements BytecodeCFG
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
DexCFG.BasicBlock
-
Field Summary
-
Fields inherited from interface com.ibm.wala.shrikeBT.Constants
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
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
DexCFG(DexIMethod method, Context context)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method 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()
-
Methods inherited from class com.ibm.wala.cfg.AbstractCFG
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
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
DexCFG
protected DexCFG(DexIMethod method, Context context) throws IllegalArgumentException
- Throws:
IllegalArgumentException
-
-
Method Detail
-
getDexMethod
public DexIMethod getDexMethod()
-
getTotalEdges
public static int getTotalEdges()
-
hashCode
public int hashCode()
- Specified by:
hashCode
in classAbstractCFG<Instruction,DexCFG.BasicBlock>
-
equals
public boolean equals(Object o)
- Specified by:
equals
in classAbstractCFG<Instruction,DexCFG.BasicBlock>
-
getInstructions
public Instruction[] getInstructions()
- Specified by:
getInstructions
in interfaceControlFlowGraph<Instruction,DexCFG.BasicBlock>
- Returns:
- the instructions of this CFG, as an array.
-
getBlockForInstruction
public 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.- Specified by:
getBlockForInstruction
in interfaceControlFlowGraph<Instruction,DexCFG.BasicBlock>
- Parameters:
index
- an instruction index- Returns:
- the basic block which contains this instruction.
-
toString
public String toString()
- Overrides:
toString
in classAbstractCFG<Instruction,DexCFG.BasicBlock>
-
getMaxStackHeight
public int getMaxStackHeight()
-
getMaxLocals
public int getMaxLocals()
-
getExceptionHandlers
public Set<ExceptionHandler> getExceptionHandlers()
- Specified by:
getExceptionHandlers
in interfaceBytecodeCFG
-
getProgramCounter
public int getProgramCounter(int index)
Description copied from interface:ControlFlowGraph
TODO: move this into IR?- Specified by:
getProgramCounter
in interfaceControlFlowGraph<Instruction,DexCFG.BasicBlock>
- Parameters:
index
- an instruction index- Returns:
- the program counter (bytecode index) corresponding to that instruction
-
-