Class PseudoData

  • All Implemented Interfaces:
    Settings, CodeUnit, Data, MemBuffer

    public class PseudoData
    extends java.lang.Object
    implements Data
    "Fake" data generated by the PseudoDisassembler.
    • Field Detail

      • baseDataType

        protected DataType baseDataType
      • level

        protected int level
      • address

        protected Address address
      • maxAddress

        protected Address maxAddress
      • program

        protected Program program
      • length

        protected int length
      • emptyAddrArray

        protected static final Address[] emptyAddrArray
      • hash

        protected int hash
      • bytes

        protected byte[] bytes
      • isBigEndian

        protected boolean isBigEndian
      • emptyMemRefs

        protected static final Reference[] emptyMemRefs
      • comments

        protected java.util.Map<java.lang.Integer,​java.lang.String> comments
    • Method Detail

      • getBaseDataType

        protected static DataType getBaseDataType​(DataType dataType)
      • computeLength

        protected static int computeLength​(DataType dataType,
                                           Address address)
      • getComponent

        public Data getComponent​(int index)
        Description copied from interface: Data
        Returns the immediate n'th component or null if none exists.
        Specified by:
        getComponent in interface Data
        Parameters:
        index - the index of the component to get.
        See Also:
        Data.getComponent(int)
      • getAddress

        public Address getAddress​(int opIndex)
        Description copied from interface: CodeUnit
        Get the Address for the given operand index if one exists. Data objects have one operand (the value).
        Specified by:
        getAddress in interface CodeUnit
        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.
        See Also:
        CodeUnit.getAddress(int)
      • getByteCodeString

        public java.lang.String getByteCodeString()
        See Also:
        ghidra.program.model.listing.CodeUnit#getByteCodeString()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        See Also:
        ghidra.program.model.listing.CodeUnit#toString()
      • getScalar

        public Scalar getScalar​(int opIndex)
        Description copied from interface: CodeUnit
        Returns the scalar at the given operand index. Data objects have one operand (the value).
        Specified by:
        getScalar in interface CodeUnit
        Parameters:
        opIndex - index of the operand.
        Returns:
        the scalar at the given operand index or null if no scalar exists at that index.
        See Also:
        CodeUnit.getScalar(int)
      • getBaseDataType

        public DataType getBaseDataType()
        Description copied from interface: Data
        If the dataType is a typeDef, then the typeDef's base type is returned, otherwise, the datatType is returned.
        Specified by:
        getBaseDataType in interface Data
        See Also:
        Data.getBaseDataType()
      • clearSetting

        public void clearSetting​(java.lang.String name)
        Description copied from interface: Settings
        Removes any value associated with the given name
        Specified by:
        clearSetting in interface Settings
        Parameters:
        name - the key to remove any association
      • getByteArray

        public byte[] getByteArray​(java.lang.String name)
        Description copied from interface: Settings
        Gets the byte[] value associated with the given name
        Specified by:
        getByteArray in interface Settings
        Parameters:
        name - the key used to retrieve a value
        Returns:
        the byte[] value for a key
        See Also:
        Settings.getByteArray(java.lang.String)
      • getLong

        public java.lang.Long getLong​(java.lang.String name)
        Description copied from interface: Settings
        Gets the Long value associated with the given name
        Specified by:
        getLong in interface Settings
        Parameters:
        name - the key used to retrieve a value
        Returns:
        the Long value for a key
        See Also:
        Settings.getLong(java.lang.String)
      • getNames

        public java.lang.String[] getNames()
        Description copied from interface: Settings
        Get this list of keys that currently have values associated with them
        Specified by:
        getNames in interface Settings
        Returns:
        an array of string keys.
        See Also:
        Settings.getNames()
      • getString

        public java.lang.String getString​(java.lang.String name)
        Description copied from interface: Settings
        Gets the String value associated with the given name
        Specified by:
        getString in interface Settings
        Parameters:
        name - the key used to retrieve a value
        Returns:
        the String value for a key
        See Also:
        Settings.getString(java.lang.String)
      • getValue

        public java.lang.Object getValue​(java.lang.String name)
        Description copied from interface: Settings
        Gets the object associated with the given name
        Specified by:
        getValue in interface Settings
        Parameters:
        name - the key used to retrieve a value
        Returns:
        the object associated with a given key
        See Also:
        Settings.getValue(java.lang.String)
      • setLong

        public void setLong​(java.lang.String name,
                            long value)
        Description copied from interface: Settings
        Associates the given long value with the name
        Specified by:
        setLong in interface Settings
        Parameters:
        name - the key
        value - the value associated with the key
        See Also:
        Settings.setLong(java.lang.String, long)
      • getComponent

        public Data getComponent​(int[] componentPath)
        Description copied from interface: Data
        Get a data item given the index path. Each integer in the array represents an index into the data item at that level.
        Specified by:
        getComponent in interface Data
        Parameters:
        componentPath - the array of indexes to use to find the requested data item.
        See Also:
        Data.getComponent(int[])
      • getComponentAt

        public Data getComponentAt​(int offset)
        Description copied from interface: Data
        Return the immediate child component that contains the byte at the given offset.
        Specified by:
        getComponentAt in interface Data
        Parameters:
        offset - the amount to add to this data items address to get the address of the requested data item.
        See Also:
        Data.getComponentAt(int)
      • getComponentsContaining

        public java.util.List<Data> getComponentsContaining​(int offset)
        Description copied from interface: Data
        Returns a list of all the immediate child components that contain the byte at the given offset.

        For a union, this will return all the components (if the offset is 0). For a structure, this will be either a single non bit field element or a list of bit field elements.

        Specified by:
        getComponentsContaining in interface Data
        Parameters:
        offset - the amount to add to this data items address to get the address of the requested data item.
        Returns:
        a list of all the immediate child components that contain the byte at the given offset.
      • getComponentIndex

        public int getComponentIndex()
        Description copied from interface: Data
        Get the index of this component in its parent
        Specified by:
        getComponentIndex in interface Data
        Returns:
        -1 if this data item is not a component of another data item.
        See Also:
        Data.getComponentIndex()
      • getComponentLevel

        public int getComponentLevel()
        Description copied from interface: Data
        Get this data's component level in its hierarchy of components.
        Specified by:
        getComponentLevel in interface Data
        Returns:
        the level of this data item with 0 being the level of top data items.
        See Also:
        Data.getComponentLevel()
      • getComponentPath

        public int[] getComponentPath()
        Description copied from interface: Data
        Get the component path if this is a component. The component path is an array of integers that represent each index in the tree of data items. Top level data items have an empty array for thier component path.
        Specified by:
        getComponentPath in interface Data
        See Also:
        Data.getComponentPath()
      • getFieldName

        public java.lang.String getFieldName()
        Description copied from interface: Data
        Get the field name of this data item if it is "inside" another data item, otherwise return null.
        Specified by:
        getFieldName in interface Data
        Returns:
        the name of this data as known from some parent data item or null if this data item is not a component of another data item.
        See Also:
        Data.getFieldName()
      • getNumComponents

        public int getNumComponents()
        Description copied from interface: Data
        Return the number of components that make up this data item. if this is an Array, return the number of elements in the array.
        Specified by:
        getNumComponents in interface Data
        See Also:
        Data.getNumComponents()
      • getParent

        public Data getParent()
        Description copied from interface: Data
        Get the immediate parent data item of this data item or null if this data item is not contained in another data item.
        Specified by:
        getParent in interface Data
        See Also:
        Data.getParent()
      • getParentOffset

        public int getParentOffset()
        Description copied from interface: Data
        Get the offset of this Data item from the start of its immediate parent.
        Specified by:
        getParentOffset in interface Data
        See Also:
        Data.getParentOffset()
      • getPathName

        public java.lang.String getPathName()
        Description copied from interface: Data
        Returns the full path name (dot notation) for this field. This includes the symbol name at this address.
        Specified by:
        getPathName in interface Data
        See Also:
        Data.getPathName()
      • getPrimitiveAt

        public Data getPrimitiveAt​(int offset)
        Description copied from interface: Data
        Returns the primitive component that is at this offset. This is useful for data items are made up of multiple layers of other data items. This method immediately goes to the lowest level data item.
        Specified by:
        getPrimitiveAt in interface Data
        See Also:
        Data.getPrimitiveAt(int)
      • getRoot

        public Data getRoot()
        Description copied from interface: Data
        Get the highest level Data item in a hierarchy of structures containing this component.
        Specified by:
        getRoot in interface Data
        See Also:
        Data.getRoot()
      • getRootOffset

        public int getRootOffset()
        Description copied from interface: Data
        Get the offset of this Data item from the start of the root data item of some hierarchy of structures.
        Specified by:
        getRootOffset in interface Data
        See Also:
        Data.getRootOffset()
      • getValue

        public java.lang.Object getValue()
        Description copied from interface: Data
        Returns the value of the data item. The value may be an address, a scalar, register or null if no value.
        Specified by:
        getValue in interface Data
        See Also:
        Data.getValue()
      • getValueClass

        public java.lang.Class<?> getValueClass()
        Description copied from interface: Data
        Get the class used to express the value of this data. NOTE: This determination is made based upon data type and settings only and does not examine memory bytes which are used to construct the data value object.
        Specified by:
        getValueClass in interface Data
        Returns:
        value class or null if a consistent class is not utilized.
      • hasStringValue

        public boolean hasStringValue()
        Description copied from interface: Data
        Returns true if this data corresponds to string data. This is determined by the corresponding data type producing a String value.
        Specified by:
        hasStringValue in interface Data
        Returns:
        true if this data returns a String value and can be treated as string data.
      • isArray

        public boolean isArray()
        Description copied from interface: Data
        Returns true if this data item is an Array of DataTypes
        Specified by:
        isArray in interface Data
        See Also:
        Data.isArray()
      • isDefined

        public boolean isDefined()
        Description copied from interface: Data
        Returns true if the data type is defined. Any address that has not been defined to be code or data is treated as undefined data.
        Specified by:
        isDefined in interface Data
        See Also:
        Data.isDefined()
      • isPointer

        public boolean isPointer()
        Description copied from interface: Data
        Returns true if this is a pointer, implies getValue() will will return an Object that is an Address.
        Specified by:
        isPointer in interface Data
        See Also:
        Data.isPointer()
      • isStructure

        public boolean isStructure()
        Description copied from interface: Data
        Returns true if this data item is a Structure.
        Specified by:
        isStructure in interface Data
        See Also:
        Data.isStructure()
      • isDynamic

        public boolean isDynamic()
        Description copied from interface: Data
        Returns true if this data item is a dynamic DataType.
        Specified by:
        isDynamic in interface Data
        See Also:
        Data.isDynamic()
      • isUnion

        public boolean isUnion()
        Description copied from interface: Data
        Returns true if this data item is a Union.
        Specified by:
        isUnion in interface Data
        See Also:
        Data.isUnion()
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: Settings
        Returns true if there are no key-value pairs stored in this settings object
        Specified by:
        isEmpty in interface Settings
        See Also:
        Settings.isEmpty()
      • getDefaultLabelPrefix

        public java.lang.String getDefaultLabelPrefix​(DataTypeDisplayOptions options)
        Description copied from interface: Data
        Returns the appropriate string to use as the default label prefix or null if it has no prefered default label prefix;
        Specified by:
        getDefaultLabelPrefix in interface Data
      • equals

        public boolean equals​(java.lang.Object obj)
      • isConstant

        public boolean isConstant()
        Specified by:
        isConstant in interface Data
        Returns:
        true if data is constant. If true, isConstant will always be false
      • isVolatile

        public boolean isVolatile()
        Specified by:
        isVolatile in interface Data
        Returns:
        true if data is volatile. If true, isVolatile will always be false
      • invalidate

        public void invalidate()
        Invalidate memory buffer
      • isValid

        public boolean isValid()
      • getAddressString

        public java.lang.String getAddressString​(boolean showBlockName,
                                                 boolean pad)
        Description copied from interface: CodeUnit
        Get the string representation of the starting address for this code unit.
        Specified by:
        getAddressString in interface CodeUnit
        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
        See Also:
        CodeUnit.getAddressString(boolean, boolean)
      • getLength

        public final int getLength()
        Get the length of the code unit.
        Specified by:
        getLength in interface CodeUnit
      • refreshIfNeeded

        protected void refreshIfNeeded()
      • getBytes

        public byte[] getBytes()
                        throws MemoryAccessException
        Gets the bytes for this code unit.
        Specified by:
        getBytes in interface CodeUnit
        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.
      • getBytes

        public int getBytes​(byte[] b,
                            int offset)
        Description copied from interface: MemBuffer
        Reads b.length bytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position. The actual number of bytes may be fewer if bytes can't be read.
        Specified by:
        getBytes in interface MemBuffer
        Parameters:
        b - the buffer into which bytes will be placed
        offset - the offset in this memory buffer from which to start reading bytes.
        Returns:
        the number of bytes read which may be fewer than b.length if available bytes are exhausted or no bytes are available at the specified offset.
      • getBytesInCodeUnit

        public void getBytesInCodeUnit​(byte[] buffer,
                                       int bufferOffset)
                                throws MemoryAccessException
        Description copied from interface: CodeUnit
        Copies max(buffer.length, code unit length) bytes into buffer starting at location offset in buffer.
        Specified by:
        getBytesInCodeUnit in interface CodeUnit
        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.
      • isBigEndian

        public boolean isBigEndian()
        Description copied from interface: MemBuffer
        Returns true if the underlying bytes are in big-endian order, false if they are little endian.
        Specified by:
        isBigEndian in interface MemBuffer
        Returns:
        true if the underlying bytes are in big-endian order, false if they are little endian.
      • getShort

        public short getShort​(int offset)
                       throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the short at the given offset, taking into account the endianess.
        Specified by:
        getShort in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        Returns:
        the short at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if a 2-byte short value cannot be read at the specified offset
      • getInt

        public int getInt​(int offset)
                   throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the int at the given offset, taking into account the endianess.
        Specified by:
        getInt in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        Returns:
        the int at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if a 4-byte integer value cannot be read at the specified offset
      • getLong

        public long getLong​(int offset)
                     throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the long at the given offset, taking into account the endianess.
        Specified by:
        getLong in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        Returns:
        the long at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if a 8-byte long value cannot be read at the specified offset
      • getBigInteger

        public java.math.BigInteger getBigInteger​(int offset,
                                                  int size,
                                                  boolean signed)
                                           throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the value at the given offset, taking into account the endianess.
        Specified by:
        getBigInteger in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        size - the number of bytes to include in the value
        signed - true if value should be treated as a signed twos-compliment value.
        Returns:
        the value at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if the request size value cannot be read at the specified offset
      • setProperty

        public void setProperty​(java.lang.String name,
                                Saveable value)
        Set the property name with the given value for this code unit.
        Specified by:
        setProperty in interface CodeUnit
        Parameters:
        name - the name of the property to save.
        value - the value of the property to save.
        Throws:
        TypeMismatchException - if the property manager for name does not support object types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • setProperty

        public void setProperty​(java.lang.String name,
                                java.lang.String value)
        Set the property name with the given value for this code unit.
        Specified by:
        setProperty in interface CodeUnit
        Parameters:
        name - the name of the property to save.
        value - the value of the property to save.
        Throws:
        TypeMismatchException - if the property manager for name does not support string types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • setProperty

        public void setProperty​(java.lang.String name,
                                int value)
        Set the property name with the given value for this code unit.
        Specified by:
        setProperty in interface CodeUnit
        Parameters:
        name - the name of the property to save.
        value - the value of the property to save.
        Throws:
        TypeMismatchException - if the property manager for name does not support int types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • setProperty

        public void setProperty​(java.lang.String name)
        Mark the property name as having a value for this code unit.
        Specified by:
        setProperty in interface CodeUnit
        Parameters:
        name - the name of the property to save.
        Throws:
        TypeMismatchException - if the property manager for name does not support void types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getObjectProperty

        public Saveable getObjectProperty​(java.lang.String name)
        Get the object property for name; returns null if there is no name property for this code unit.
        Specified by:
        getObjectProperty in interface CodeUnit
        Parameters:
        name - the name of the property.
        Throws:
        TypeMismatchException - if the property manager for name does not support object types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getStringProperty

        public java.lang.String getStringProperty​(java.lang.String name)
        Get the string property for name; returns null if there is no name property for this code unit.
        Specified by:
        getStringProperty in interface CodeUnit
        Parameters:
        name - the name of the property.
        Throws:
        TypeMismatchException - if the property manager for name does not support string types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getIntProperty

        public int getIntProperty​(java.lang.String name)
                           throws NoValueException
        Get the int property for name.
        Specified by:
        getIntProperty in interface CodeUnit
        Parameters:
        name - the name of the property.
        Throws:
        NoValueException - if there is not name property for this code unit
        TypeMismatchException - if the property manager for name does not support int types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • hasProperty

        public boolean hasProperty​(java.lang.String name)
        Description copied from interface: CodeUnit
        Returns true if the codeunit has the given property defined.
        Specified by:
        hasProperty in interface CodeUnit
        Parameters:
        name - the name of the property
      • getVoidProperty

        public boolean getVoidProperty​(java.lang.String name)
        Returns whether this code unit is marked as having the name property.
        Specified by:
        getVoidProperty in interface CodeUnit
        Parameters:
        name - the name of the property.
        Throws:
        TypeMismatchException - if the property manager for name does not support void types
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • removeProperty

        public void removeProperty​(java.lang.String name)
        Remove the property value with the given name for this code unit.
        Specified by:
        removeProperty in interface CodeUnit
        Parameters:
        name - the name of the property.
      • visitProperty

        public void visitProperty​(PropertyVisitor visitor,
                                  java.lang.String propertyName)
        Invokes the visit() method of the specified PropertyVisitor if the named property exists for this code unit.
        Specified by:
        visitProperty in interface CodeUnit
        Parameters:
        visitor - the class implementing the PropertyVisitor interface.
        propertyName - the name of the property to be visited.
      • getLabel

        @Deprecated
        public java.lang.String getLabel()
        Deprecated.
        Get the label for this code unit.
        Specified by:
        getLabel in interface CodeUnit
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getSymbols

        public Symbol[] getSymbols()
        Get the symbols for this code unit.
        Specified by:
        getSymbols in interface CodeUnit
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getPrimarySymbol

        public Symbol getPrimarySymbol()
        Get the primary Symbol for this code unit.
        Specified by:
        getPrimarySymbol in interface CodeUnit
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getMinAddress

        public Address getMinAddress()
        Get the starting address for this code unit.
        Specified by:
        getMinAddress in interface CodeUnit
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getMaxAddress

        public Address getMaxAddress()
        Get the ending address for this code unit.
        Specified by:
        getMaxAddress in interface CodeUnit
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getNextCodeUnit

        public CodeUnit getNextCodeUnit()
        Get the code unit after this code unit.
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getPreviousCodeUnit

        public CodeUnit getPreviousCodeUnit()
        Get the code unit before this code unit.
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • isSuccessor

        public boolean isSuccessor​(CodeUnit codeUnit)
        Return true if the given CodeUnit follows directly after this code unit.
        Specified by:
        isSuccessor in interface CodeUnit
        Parameters:
        codeUnit - the codeUnit being tested to see if it follows this codeUnit.
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getComment

        public java.lang.String getComment​(int commentType)
        Description copied from interface: CodeUnit
        Get the comment for the given type
        Specified by:
        getComment in interface CodeUnit
        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
        See Also:
        CodeUnit.getComment(int)
      • getCommentAsArray

        public java.lang.String[] getCommentAsArray​(int commentType)
        Get the comment as an array where each element is a single line for the given type.
        Specified by:
        getCommentAsArray in interface CodeUnit
        Parameters:
        commentType - must be either EOL_COMMENT_TYPE, PRE_COMMENT_TYPE, POST_COMMENT_TYPE, or PLATE_COMMENT_TYPE
        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:
        java.lang.IllegalArgumentException - if type is not one of the three types of comments supported
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • setCommentAsArray

        public void setCommentAsArray​(int commentType,
                                      java.lang.String[] comment)
        Set the comment for the given type.
        Specified by:
        setCommentAsArray in interface CodeUnit
        Parameters:
        commentType - must be either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or PLATE_COMMENT
        comment - the lines that make up the comment
        Throws:
        java.lang.IllegalArgumentException - if type is not one of the three types of comments supported
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • setComment

        public void setComment​(int commentType,
                               java.lang.String comment)
        Set the comment for the given type.
        Specified by:
        setComment in interface CodeUnit
        Parameters:
        commentType - must be either EOL_COMMENT, PRE_COMMENT, POST_COMMENT, or PLATE_COMMENT
        comment - the comment
        Throws:
        java.lang.IllegalArgumentException - if type is not one of the three types of comments supported
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • contains

        public boolean contains​(Address testAddr)
        Determines if this code unit contains the indicated address.
        Specified by:
        contains in interface CodeUnit
        Parameters:
        testAddr - the address to test
        Returns:
        true if address is contained in the range.
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • compareTo

        public int compareTo​(Address a)
        Compares the given address to the address range of this node.
        Specified by:
        compareTo in interface CodeUnit
        Parameters:
        a - the address
        Returns:
        a negative integer if 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
        Throws:
        java.util.ConcurrentModificationException - if this object is no longer valid.
      • getByte

        public byte getByte​(int offset)
                     throws MemoryAccessException
        Get one byte from memory at the current position plus offset.
        Specified by:
        getByte in interface MemBuffer
        Parameters:
        offset - the displacement from the current position.
        Returns:
        the data at offset from the current position.
        Throws:
        AddressOutOfBoundsException - if offset exceeds address space
        java.lang.IndexOutOfBoundsException - if offset is negative
        MemoryAccessException - if memory cannot be read
      • getAddress

        public Address getAddress()
        Get the Address which corresponds to the offset 0.
        Specified by:
        getAddress in interface MemBuffer
        Returns:
        the current address of offset 0.
      • getMemory

        public Memory getMemory()
        Get the Memory object actually used by the MemBuffer. return the Memory used by this MemBuffer.
        Specified by:
        getMemory in interface MemBuffer
        Returns:
        the Memory used by this MemBuffer.
      • addMnemonicReference

        public void addMnemonicReference​(Address refAddr,
                                         RefType refType,
                                         SourceType sourceType)
        Add a reference to the mnemonic for this code unit.
        Specified by:
        addMnemonicReference in interface CodeUnit
        Parameters:
        refAddr - address of reference to add
        refType - type of reference being added
        sourceType - the source of this reference
      • getMnemonicReferences

        public Reference[] getMnemonicReferences()
        Get references for the mnemonic for this instruction.
        Specified by:
        getMnemonicReferences in interface CodeUnit
        Returns:
        an array of memory references. A zero length array will be returned if there are no references for the mnemonic.
      • removeMnemonicReference

        public void removeMnemonicReference​(Address refAddr)
        Remove a reference to the mnemonic for this instruction.
        Specified by:
        removeMnemonicReference in interface CodeUnit
        Parameters:
        refAddr - the address to remove as a reference.
      • getOperandReferences

        public Reference[] getOperandReferences​(int opIndex)
        Get the references for the operand index. If the operand type is a register, then the user defined references are returned; otherwise an array with the address for the operand value is returned.
        Specified by:
        getOperandReferences in interface CodeUnit
        Parameters:
        opIndex - operand index (0 is the first operand)
      • removeOperandReference

        public void removeOperandReference​(int opIndex,
                                           Address refAddr)
        Remove a user defined reference to the operand at opIndex.
        Specified by:
        removeOperandReference in interface CodeUnit
        Parameters:
        opIndex - operand index
        refAddr - address referencing the operand
      • getReferencesFrom

        public Reference[] getReferencesFrom()
        Get ALL reference FROM this code unit.
        Specified by:
        getReferencesFrom in interface CodeUnit
        Returns:
        an array of memory references from this codeUnit or an empty array if there are no references.
      • setExternalReference

        public void setExternalReference​(Reference ref)
      • setMemoryReference

        public void setMemoryReference​(int opIndex,
                                       Address refAddr,
                                       RefType refType)
      • setStackReference

        public void setStackReference​(int opIndex,
                                      int offset,
                                      SourceType sourceType,
                                      RefType refType)
        Description copied from interface: CodeUnit
        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
        Specified by:
        setStackReference in interface CodeUnit
        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

        public void setRegisterReference​(int opIndex,
                                         Register reg,
                                         SourceType sourceType,
                                         RefType refType)
        Description copied from interface: CodeUnit
        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
        Specified by:
        setRegisterReference in interface CodeUnit
        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...
      • getPrimaryReference

        public Reference getPrimaryReference​(int index)
        Description copied from interface: CodeUnit
        Get the primary reference for the operand index.
        Specified by:
        getPrimaryReference in interface CodeUnit
        Parameters:
        index - operand index (0 is the first operand)
      • setPrimaryMemoryReference

        public void setPrimaryMemoryReference​(Reference ref)
        Description copied from interface: CodeUnit
        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.
        Specified by:
        setPrimaryMemoryReference in interface CodeUnit
        Parameters:
        ref - the reference to be set as primary.
      • getStackReference

        public StackReference getStackReference​(int opIndex)
        See Also:
        ghidra.program.model.listing.CodeUnit#getStackReference(int)
      • removeStackReference

        public void removeStackReference​(int opIndex)
        See Also:
        ghidra.program.model.listing.CodeUnit#removeStackReference(int)
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object