Interface CodeUnit

All Superinterfaces:
MemBuffer, PropertySet
All Known Subinterfaces:
Data, Instruction
All Known Implementing Classes:
DataStub, InstructionDB, InstructionStub, PseudoData, PseudoInstruction

public interface CodeUnit extends MemBuffer, PropertySet
Interface common to both instructions and data.
  • Field Details

    • MNEMONIC

      static final int MNEMONIC
      Indicator for a mnemonic (versus an operand).
      See Also:
    • NO_COMMENT

      static final int NO_COMMENT
      See Also:
    • EOL_COMMENT

      static final int EOL_COMMENT
      comment type for end of line
      See Also:
    • PRE_COMMENT

      static final int PRE_COMMENT
      comment type that goes before a code unit
      See Also:
    • POST_COMMENT

      static final int POST_COMMENT
      comment type that follows after a code unit
      See Also:
    • PLATE_COMMENT

      static final int PLATE_COMMENT
      Property name for plate comment type
      See Also:
    • REPEATABLE_COMMENT

      static final int REPEATABLE_COMMENT
      Property name for repeatable comment type
      See Also:
    • COMMENT_PROPERTY

      static final String COMMENT_PROPERTY
      Any comment property.
      See Also:
    • SPACE_PROPERTY

      static final String SPACE_PROPERTY
      Property name for vertical space formatting
      See Also:
    • INSTRUCTION_PROPERTY

      static final String INSTRUCTION_PROPERTY
      Property name for code units that are instructions
      See Also:
    • DEFINED_DATA_PROPERTY

      static final String DEFINED_DATA_PROPERTY
      Property name for code units that are defined data
      See Also:
  • Method Details

    • getAddressString

      String getAddressString(boolean showBlockName, boolean pad)
      Get the string representation of the starting address for this code unit.
      Parameters:
      showBlockName - true if the string should include the memory block name
      pad - if true, the address will be padded with leading zeros. Even if pad is false, the string will be padded to make the address string contain at least 4 digits.
      Returns:
      string representation of address
    • getLabel

      String getLabel()
      Get the label for this code unit.
    • getSymbols

      Symbol[] getSymbols()
      Get the Symbols for this code unit.
      Throws:
      ConcurrentModificationException - if this object is no longer valid.
    • getPrimarySymbol

      Symbol getPrimarySymbol()
      Get the Primary Symbol for this code unit.
      Throws:
      ConcurrentModificationException - if this object is no longer valid.
    • getMinAddress

      Address getMinAddress()
      Get the starting address for this code unit.
    • getMaxAddress

      Address getMaxAddress()
      Get the ending address for this code unit.
    • getMnemonicString

      String getMnemonicString()
      Get the mnemonic for this code unit, e.g., MOV, JMP
    • getComment

      String getComment(int commentType)
      Get the comment for the given type
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      Returns:
      the comment string of the appropriate type or null if no comment of that type exists for this codeunit
      Throws:
      IllegalArgumentException - if type is not one of the three types of comments supported
    • getCommentAsArray

      String[] getCommentAsArray(int commentType)
      Get the comment for the given type and parse it into an array of strings such that each line is its own string.
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      Returns:
      an array of strings where each item in the array is a line of text in the comment. If there is no comment of the requested type, an empty array is returned.
      Throws:
      IllegalArgumentException - if type is not one of the three types of comments supported
    • setComment

      void setComment(int commentType, String comment)
      Set the comment for the given comment type. Passing null clears the comment
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      comment - comment for code unit; null clears the comment
      Throws:
      IllegalArgumentException - if type is not one of the three types of comments supported
    • setCommentAsArray

      void setCommentAsArray(int commentType, String[] comment)
      Set the comment (with each line in its own string) for the given comment type
      Parameters:
      commentType - either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or REPEATABLE_COMMENT
      comment - an array of strings where each string is a single line of the comment.
      Throws:
      IllegalArgumentException - if type is not one of the three types of comments supported
    • getLength

      int getLength()
      Get length of this code unit. NOTE: If an instruction length-override is set this method will return the reduced length.
      Returns:
      code unit length
    • getBytes

      byte[] getBytes() throws MemoryAccessException
      Get the bytes that make up this code unit. NOTE: If an instruction length-override is set this method will not return all bytes associated with the instruction prototype.
      Returns:
      an array of bytes that are in memory at the codeunits address. The array length is the same as the codeUnits length
      Throws:
      MemoryAccessException - if the full number of bytes could not be read.
    • getBytesInCodeUnit

      void getBytesInCodeUnit(byte[] buffer, int bufferOffset) throws MemoryAccessException
      Copies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.
      Parameters:
      buffer - byte array to copy into
      bufferOffset - offset in byte array the copy will start
      Throws:
      MemoryAccessException - if the full number of bytes could not be read.
    • contains

      boolean contains(Address testAddr)
      Returns true if address is contained in the range of this codeUnit
      Parameters:
      testAddr - the address to test.
    • compareTo

      int compareTo(Address addr)
      Compares the given address to the address range of this node.
      Parameters:
      addr - address to compare.
      Returns:
      a negative integer if this addr is greater than the maximum range address zero if addr is in the range a positive integer if addr is less than minimum range address
    • addMnemonicReference

      void addMnemonicReference(Address refAddr, RefType refType, SourceType sourceType)
      Add a reference to the mnemonic for this code unit.
      Parameters:
      refAddr - address to add as a reference.
      refType - the type of reference to add.
      sourceType - the source of this reference
    • removeMnemonicReference

      void removeMnemonicReference(Address refAddr)
      Remove a reference to the mnemonic for this code unit.
      Parameters:
      refAddr - the address to remove as a reference.
    • getMnemonicReferences

      Reference[] getMnemonicReferences()
      Get references for the mnemonic for this code unit.
      Returns:
      an array of memory references. A zero length array will be returned if there are no references for the mnemonic.
    • getOperandReferences

      Reference[] getOperandReferences(int index)
      Get the references for the operand index.
      Parameters:
      index - operand index (0 is the first operand)
    • getPrimaryReference

      Reference getPrimaryReference(int index)
      Get the primary reference for the operand index.
      Parameters:
      index - operand index (0 is the first operand)
    • addOperandReference

      void addOperandReference(int index, Address refAddr, RefType type, SourceType sourceType)
      Add a memory reference to the operand at the given index.
      Parameters:
      index - operand index
      refAddr - reference address
      type - the reference type to be added.
      sourceType - the source of this reference
    • removeOperandReference

      void removeOperandReference(int index, Address refAddr)
      Remove a reference to the operand.
      Parameters:
      index - operand index
      refAddr - address referencing the operand
    • getReferencesFrom

      Reference[] getReferencesFrom()
      Get ALL memory references FROM this code unit.
      Returns:
      an array of memory references from this codeUnit or an empty array if there are no references.
    • getReferenceIteratorTo

      ReferenceIterator getReferenceIteratorTo()
      Get an iterator over all references TO this code unit.
    • getProgram

      Program getProgram()
      Returns the program that generated this CodeUnit.
    • getExternalReference

      ExternalReference getExternalReference(int opIndex)
      Gets the external reference (if any) at the opIndex
      Parameters:
      opIndex - the operand index to look for external references
      Returns:
      the external reference at the operand or null if none exists.
    • removeExternalReference

      void removeExternalReference(int opIndex)
      Remove external reference (if any) at the given opIndex opIndex the index of the operand from which to remove any external reference.
    • setPrimaryMemoryReference

      void setPrimaryMemoryReference(Reference ref)
      Sets a memory reference to be the primary reference at its address/opIndex location. The primary reference is the one that is used in the getOperandRepresentation() method.
      Parameters:
      ref - the reference to be set as primary.
    • setStackReference

      void setStackReference(int opIndex, int offset, SourceType sourceType, RefType refType)
      Sets a stack reference at the offset on the specified operand index, which effectively substitutes the previous operation interpretation
      NOTE: If another reference was previously set on the operand, then it will be replaced with this stack reference
      Parameters:
      opIndex - the index of the operand to set this stack reference
      offset - the (+/-) offset from stack base address
      sourceType - the source of this reference
      refType - type of reference, RefType.READ,WRITE,PTR...
    • setRegisterReference

      void setRegisterReference(int opIndex, Register reg, SourceType sourceType, RefType refType)
      Sets a register reference at the offset on the specified operand index, which effectively substitutes the previous operation interpretation
      NOTE: If another reference was previously set on the operand, then it will be replaced with this register reference
      Parameters:
      opIndex - the index of the operand to set this register reference
      reg - a register
      sourceType - the source of this reference
      refType - type of reference, RefType.READ,WRITE,PTR...
    • getNumOperands

      int getNumOperands()
      Get the number of operands for this code unit.
    • getAddress

      Address getAddress(int opIndex)
      Get the Address for the given operand index if one exists. Data objects have one operand (the value).
      Parameters:
      opIndex - index of the operand.
      Returns:
      An addres if the operand represents a fully qualified address (given the context), or if the operand is a Scalar treated as an address. Null is returned if no address or scalar exists on that operand.
    • getScalar

      Scalar getScalar(int opIndex)
      Returns the scalar at the given operand index. Data objects have one operand (the value).
      Parameters:
      opIndex - index of the operand.
      Returns:
      the scalar at the given operand index or null if no scalar exists at that index.