Class SymbolDB

    • Method Detail

      • isDeleted

        public boolean isDeleted()
        Description copied from interface: Symbol
        Determine if this symbol object has been deleted. NOTE: the symbol could be deleted at anytime due to asynchronous activity.
        Specified by:
        isDeleted in interface Symbol
        Returns:
        true if symbol has been deleted, false if not.
      • checkDeleted

        protected void checkDeleted()
        Description copied from class: DatabaseObject
        Checks if this object has been deleted, in which case any use of the object is not allowed. This method should be invoked before any modifications to the object are performed to ensure it still exists and is in a valid state.
        Overrides:
        checkDeleted in class DatabaseObject
      • toString

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

        protected boolean refresh()
        Description copied from class: DatabaseObject
        Tells the object to refresh its state from the database.
        Specified by:
        refresh in class DatabaseObject
        Returns:
        true if the object was able to refresh itself. Return false if the object was deleted. Objects that extend this class must implement a refresh method. If an object can never refresh itself, then it should always return false.
      • refresh

        protected boolean refresh​(DBRecord rec)
        Description copied from class: DatabaseObject
        Tells the object to refresh its state from the database using the specified record if not null. NOTE: The default implementation ignores the record and invokes refresh(). Implementations of this method must take care if multiple database tables are used since the record supplied could correspond to another object. In some cases it may be best not to override this method or ignore the record provided.
        Overrides:
        refresh in class DatabaseObject
        Parameters:
        rec - valid record associated with object's key (optional, may be null to force record lookup or other refresh technique)
        Returns:
        true if the object was able to refresh itself. Return false if record is null and object was deleted. Objects that extend this class must implement a refresh method. If an object can never refresh itself, then it should always return false.
      • getAddress

        public Address getAddress()
        Specified by:
        getAddress in interface Symbol
        Returns:
        the address for the symbol.
      • setAddress

        protected void setAddress​(Address addr)
      • moveLowLevel

        protected void moveLowLevel​(Address newAddress,
                                    java.lang.String newName,
                                    Namespace newNamespace,
                                    SourceType newSource,
                                    boolean pinned)
        low level record adjustment to move a symbol. Used only when moving a memory block or changing the image base.
        Parameters:
        newAddress - the new address for the symbol
        newName - the new name for the symbol (or null if the name should stay the same)
        newNamespace - the new namespace for the symbol (or null if it should stay the same)
        newSource - the new SourceType for the symbol (or null if it should stay the same)
        pinned - the new pinned state
      • getName

        public final java.lang.String getName()
        Specified by:
        getName in interface Symbol
        Returns:
        the name of this symbol.
      • doGetName

        protected java.lang.String doGetName()
        The code for creating the name content for this symbol. This code will be called with the symbol's lock.
        Returns:
        the name
      • getProgram

        public Program getProgram()
        Specified by:
        getProgram in interface Symbol
        Returns:
        the program associated with this symbol. Null may be returned for global symbols.
      • getName

        public java.lang.String getName​(boolean includeNamespace)
        Description copied from interface: Symbol
        Returns the symbol name, optionally prepended with the namespace path.
        Specified by:
        getName in interface Symbol
        Parameters:
        includeNamespace - if true, the namespace path is prepended to the name.
        Returns:
        formatted name
      • getPath

        public java.lang.String[] getPath()
        Description copied from interface: Symbol
        Gets the full path name for this symbol as an ordered array of strings ending with the symbol name. The global symbol will return an empty array.
        Specified by:
        getPath in interface Symbol
        Returns:
        the array indicating the full path name for this symbol.
      • getReferenceCount

        public int getReferenceCount()
        Specified by:
        getReferenceCount in interface Symbol
        Returns:
        the number of References to this symbol.
      • getReferences

        public Reference[] getReferences​(TaskMonitor monitor)
        Description copied from interface: Symbol
        Returns all memory references to the address of this symbol. If you do not have a TaskMonitor instance, then you can pass TaskMonitorAdapter.DUMMY_MONITOR or null.
        Specified by:
        getReferences in interface Symbol
        Parameters:
        monitor - the monitor that is used to report progress and to cancel this potentially long-running call
        Returns:
        all memory references to the address of this symbol.
      • hasMultipleReferences

        public boolean hasMultipleReferences()
        Specified by:
        hasMultipleReferences in interface Symbol
        Returns:
        true if this symbol has more than one reference to it.
      • hasReferences

        public boolean hasReferences()
        Specified by:
        hasReferences in interface Symbol
        Returns:
        true if this symbol has at least one reference to it.
      • isDynamic

        public boolean isDynamic()
        Specified by:
        isDynamic in interface Symbol
        Returns:
        true if this symbol is a dynamic symbol (not actually defined in the database).
      • isExternalEntryPoint

        public boolean isExternalEntryPoint()
        Specified by:
        isExternalEntryPoint in interface Symbol
        Returns:
        true if the symbol is at an address set as a external entry point.
      • isPrimary

        public abstract boolean isPrimary()
        Specified by:
        isPrimary in interface Symbol
        Returns:
        true if this symbol is primary
      • setSource

        public void setSource​(SourceType newSource)
        Sets this symbol's source as specified.
        Specified by:
        setSource in interface Symbol
        Parameters:
        newSource - the new source type (IMPORTED, ANALYSIS, USER_DEFINED)
        Throws:
        java.lang.IllegalArgumentException - if you try to change the source from default or to default
      • getSource

        public SourceType getSource()
        Description copied from interface: Symbol
        Gets the source of this symbol. SourceType
        Specified by:
        getSource in interface Symbol
        Returns:
        the source of this symbol
      • isPinned

        public boolean isPinned()
        Description copied from interface: Symbol
        Returns true if the symbol is pinned to its current address. If it is pinned, then moving or removing the memory associated with that address will not affect this symbol.
        Specified by:
        isPinned in interface Symbol
        Returns:
        true if the symbol is pinned to its current address.
      • doIsPinned

        protected boolean doIsPinned()
      • setPinned

        public void setPinned​(boolean pinned)
        Description copied from interface: Symbol

        Sets whether or not this symbol is pinned to its associated address.

        If the symbol is pinned then moving or removing the memory associated with its address will not cause this symbol to be removed and will not cause its address to change. If the symbol is not pinned, then removing the memory at its address will also remove this symbol.

        Likewise, moving a memory block containing a symbol that is not anchored will change the address for that symbol to keep it associated with the same byte in the memory block.

        Specified by:
        setPinned in interface Symbol
        Parameters:
        pinned - true indicates this symbol is anchored to its address. false indicates this symbol is not anchored to its address.
      • doSetPinned

        protected void doSetPinned​(boolean pinned)
      • setName

        public void setName​(java.lang.String newName,
                            SourceType source)
                     throws DuplicateNameException,
                            InvalidInputException
        Description copied from interface: Symbol
        Sets the name this symbol. If this symbol is dynamic, then the name is set and the symbol is no longer dynamic.
        Specified by:
        setName in interface Symbol
        Parameters:
        newName - the new name for this symbol.
        source - the source of this symbol
        Some symbol types, such as function symbols, can set the source to Symbol.DEFAULT.
        Throws:
        DuplicateNameException - if name already exists as the name of another symbol or alias.
        InvalidInputException - if alias contains blank characters, is zero length, or is null
      • validateNameSource

        protected SourceType validateNameSource​(java.lang.String newName,
                                                SourceType source)
        Allow symbol implementations to validate the source when setting the name of this symbol
        Parameters:
        newName - the new name
        source - the source type
        Returns:
        the validated source type
      • getSymbolsDynamicallyRenamedByMyRename

        protected java.util.List<SymbolDB> getSymbolsDynamicallyRenamedByMyRename()
      • setPrimary

        public boolean setPrimary()
        Description copied from interface: Symbol
        Sets this symbol to be primary. All other symbols at the same address will be set to !primary. Only applies to non-function symbols.
        Specified by:
        setPrimary in interface Symbol
        Returns:
        returns true if the symbol was not primary and now it is, otherwise false
        See Also:
        Symbol.setPrimary()
      • getID

        public long getID()
        Specified by:
        getID in interface Symbol
        Returns:
        this symbol's ID.
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • hashCode

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

        public Namespace getParentNamespace()
        Description copied from interface: Symbol
        Return the parent namespace for this symbol.
        Specified by:
        getParentNamespace in interface Symbol
        Returns:
        the namespace that contains this symbol.
      • doGetParentNamespace

        protected Namespace doGetParentNamespace()
      • getParentSymbol

        public Symbol getParentSymbol()
        Description copied from interface: Symbol
        Returns namespace symbol of the namespace containing this symbol
        Specified by:
        getParentSymbol in interface Symbol
        Returns:
        parent namespace symbol
      • isGlobal

        public boolean isGlobal()
        Specified by:
        isGlobal in interface Symbol
        Returns:
        true if the symbol is global
      • getSymbolStringData

        public java.lang.String getSymbolStringData()
        Returns the symbol's string data which has different meanings depending on the symbol type and whether or not it is external
        Returns:
        the symbol's string data
      • setSymbolStringData

        public void setSymbolStringData​(java.lang.String stringData)
        Sets the symbol's string data field. This field's data has different uses depending on the symbol type and whether or not it is external.
        Parameters:
        stringData - the string to store in the string data field
      • getDataTypeId

        public long getDataTypeId()
      • setDataTypeId

        public void setDataTypeId​(long value)
        Sets the generic symbol data 1.
        Parameters:
        value - the value to set as symbol data 1.
      • getVariableOffset

        protected int getVariableOffset()
        gets the generic symbol data 2 data.
        Returns:
        the symbol data
      • setVariableOffset

        public void setVariableOffset​(int offset)
        Sets the symbol's variable offset. For parameters, this is the ordinal, for locals, it is the first use offset
        Parameters:
        offset - the value to set as the symbols variable offset.
      • doSetPrimary

        protected void doSetPrimary​(boolean primary)
      • doCheckIsPrimary

        protected boolean doCheckIsPrimary()
      • delete

        public boolean delete()
        Description copied from interface: Symbol
        Delete the symbol and its associated resources. Any references symbol associations will be discarded.
        Specified by:
        delete in interface Symbol
        Returns:
        true if successful
      • isDeleting

        public boolean isDeleting()
      • isDescendant

        public boolean isDescendant​(Namespace namespace)
        Description copied from interface: Symbol
        Returns true if the given namespace symbol is a descendant of this symbol.
        Specified by:
        isDescendant in interface Symbol
        Parameters:
        namespace - to test as descendant symbol of this Symbol
        Returns:
        true if this symbol is an ancestor of the given namespace symbol
      • isValidParent

        public abstract boolean isValidParent​(Namespace parent)
        Description copied from interface: Symbol
        Determines if the given parent is valid for this Symbol. Specified namespace must belong to the same symbol table as this symbol.
        Specified by:
        isValidParent in interface Symbol
        Parameters:
        parent - prospective parent namespace for this symbol
        Returns:
        true if parent is valid