Class InstructionSet

  • All Implemented Interfaces:
    java.lang.Iterable<InstructionBlock>

    public class InstructionSet
    extends java.lang.Object
    implements java.lang.Iterable<InstructionBlock>
    A set of instructions organized as a graph of basic blocks.
    • Constructor Detail

      • InstructionSet

        public InstructionSet​(AddressFactory addrFactory)
    • Method Detail

      • addBlock

        public void addBlock​(InstructionBlock block)
        Add an Instruction block to this Instruction Set. If the block is empty it will only be added to the empty-list and will not be added to the maps or block iterator
        Parameters:
        block - the block to add.
      • getInstructionBlockContaining

        public InstructionBlock getInstructionBlockContaining​(Address address)
        Returns the non-empty InstructionBlock containing the specified address
        Parameters:
        address -
        Returns:
        the InstructionBlock containing the specified address or null if not found
      • findFirstIntersectingBlock

        public InstructionBlock findFirstIntersectingBlock​(Address min,
                                                           Address max)
        Find the first block within this InstructionSet which intersects the specified range. This method should be used sparingly since it uses a brute-force search.
        Parameters:
        address -
        Returns:
        block within this InstructionSet which intersects the specified range or null if not found
      • getInstructionAt

        public Instruction getInstructionAt​(Address address)
        Returns the instruction at the specified address within this instruction set
        Parameters:
        address -
        Returns:
        instruction at the specified address within this instruction set or null if not found
      • getMinAddress

        public Address getMinAddress()
        Returns the minimum address for this Instruction set;
        Returns:
        the minimum address for this Instruction set;
      • getAddressSet

        public AddressSetView getAddressSet()
        Returns the address set that makes up all the instructions contained in this set.
        Returns:
        the address set that makes up all the instructions contained in this set.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getInstructionCount

        public int getInstructionCount()
        Returns the number of instructions in this instruction set.
        Returns:
        the number of instructions in this instruction set.
      • containsBlockAt

        public boolean containsBlockAt​(Address blockAddr)
      • intersects

        public boolean intersects​(Address minAddress,
                                  Address maxAddress)
        Returns true if this instruction set intersects the specified range
        Parameters:
        minAddress -
        maxAddress -
        Returns:
        true if this instruction set intersects the specified range
      • iterator

        public java.util.Iterator<InstructionBlock> iterator()
        Returns an iterator over the blocks in this Instruction set, giving preference to fall through flows. This iterator will not follow any flows from a block that has a conflict. If the last block returned from the iterator is marked as a conflict before the next() or hasNext() methods are called, then this iterator will respect the conflict. In other words, this iterator follows block flows on the fly and doesn't pre-compute the blocks to return. Also, if any blocks in this set don't have a flow to path from the start block, it will not be included in this iterator.
        Specified by:
        iterator in interface java.lang.Iterable<InstructionBlock>
      • emptyBlockIterator

        public java.util.Iterator<InstructionBlock> emptyBlockIterator()
        Returns an iterator over all empty blocks which likely contain a conflict error.
        Returns:
        empty block iterator
      • getConflicts

        public java.util.List<InstructionError> getConflicts()
        Returns a list of conflicts for this set. If a block is not reachable from a non-conflicted block, it's conflicts(if any) will not be included.
        Returns:
        the list of conflicts for this set.