Interface IControlFlowGraph<InsnType extends IInstruction,Block extends IBasicBlock<InsnType>>

Type Parameters:
InsnType -
All Superinterfaces:
Iterable<Block>
All Known Implementing Classes:
CFG, CFG

public interface IControlFlowGraph<InsnType extends IInstruction,Block extends IBasicBlock<InsnType>> extends Iterable<Block>
Generic interface for control flow graph (CFG) objects.
  • Method Details

    • size

      int size()
      Get the number of blocks.
      Returns:
    • get

      Block get(int index)
      Retrieve a basic block.
      Parameters:
      index -
      Returns:
    • indexOf

      int indexOf(Block b)
      Parameters:
      b -
      Returns:
    • getEntryAddress

      long getEntryAddress()
      Routine entry-point address. Note that this address may not be the lowest one in the CFG.
      Returns:
      the address of the entry block
    • getFirstAddress

      long getFirstAddress()
      Routine lowest address (inclusive). Note that this address may not be the entry-point address for this routine.
      Returns:
    • getLastAddress

      long getLastAddress()
      Routine highest address (inclusive).
      Returns:
    • getEndAddress

      long getEndAddress()
      Routine highest address (exclusive).
      Returns:
    • getEffectiveSize

      int getEffectiveSize()
      Calculate the 'effective' size of this CFG, that is, the sum of the size of each basic block.
      Returns:
      the CFG size
    • getBlock

      Block getBlock(int index)
      Parameters:
      index -
      Returns:
    • getBlocks

      List<Block> getBlocks()
      Get a copy of the block list of the CFG. The list is ordered by ascending block address. Modifying the list does not impact the CFG.
      Returns:
      a copy of the list of blocks
    • getBlocksView

      List<Block> getBlocksView()
      Get a read-only view of the list of blocks for this CFG. The list is ordered by ascending block address.
      Returns:
      the list of blocks
    • getBlockAt

      Block getBlockAt(long address)
      Get the basic block that starts at the provided address or offset.
      Parameters:
      address - the block address/offset
      Returns:
      basic block, or null if none starts at that address
    • getBlockEndingAt

      Block getBlockEndingAt(long address)
      Get the basic block that ends on the provided address.
      Parameters:
      address - wanted block end address (exclusive)
      Returns:
      basic block, or null if none ends at that address
    • getBlockContaining

      Block getBlockContaining(long address)
      Get the basic block that contains the provided address.

      Note that the address just needs to be in the block address range; it does not need to point to the beginning of an instruction within the block

      Parameters:
      address - an address within the block
      Returns:
    • getBlockByLastAddress

      Block getBlockByLastAddress(long address)
      Parameters:
      address -
      Returns:
    • getEntryBlock

      Block getEntryBlock()
      Get the entry block. The entry block is unique.
      Returns:
      never null; the method throws on error
    • getExitBlocks

      List<Block> getExitBlocks()
      Get the ordered list of exit blocks. A CFG may have zero or more exit blocks; CFG representing standard routines will have at least one (generally one) exit block.
      Returns:
      a collection of blocks, possibly empty
    • getInstructionCount

      int getInstructionCount()
      Get the total number of instructions in the CFG. This method sums the number of instructions of each block of the CFG.
      Returns:
    • instructions

      Iterable<InsnType> instructions()
      Get an instruction iterator. Also see addressableInstructions().
      Returns:
      an iterator (not supporting remove)
    • addressableInstructions

      Iterable<AddressableInstruction<InsnType>> addressableInstructions()
      Get an instruction-with-address iterator. Also see instructions().
      Returns:
      an iterator (not supporting remove)
    • getInstructions

      List<InsnType> getInstructions()
      Get the instruction list of this CFG by aggregating each instruction of every block. The list is ordered by ascending address/offset.
      Returns:
    • getInstruction

      InsnType getInstruction(long address)
      Get the instruction located at the exact address.
      Parameters:
      address -
      Returns:
      an instruction, null if none
    • getInstructionLocation

      Couple<Block,Integer> getInstructionLocation(long address)
      Locate an instruction.
      Parameters:
      address - instruction address
      Returns:
      a couple (basic block, instruction index within that block); null on error
    • getGraphRepresentation

      void getGraphRepresentation(List<int[]> edges, List<int[]> irregularEdges)
      Get the a graph representation of the CFG. The list of edges use a 1-based node numbering scheme.
      Parameters:
      edges - (output) array of regular edges, eg: {{1,2},{1,3},{2,3}}
      irregularEdges - (output) array of irregular edges