Class SymbolDB

java.lang.Object
ghidra.program.database.DatabaseObject
ghidra.program.database.symbol.SymbolDB
All Implemented Interfaces:
Symbol
Direct Known Subclasses:
ClassSymbol, CodeSymbol, FunctionSymbol, LibrarySymbol, NamespaceSymbol, VariableSymbolDB

public abstract class SymbolDB extends DatabaseObject implements Symbol
Base class for symbols
  • Field Details

  • Method Details

    • 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 String toString()
      Overrides:
      toString in class 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, 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 String getName()
      Specified by:
      getName in interface Symbol
      Returns:
      the name of this symbol.
    • doGetName

      protected 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()
      Description copied from interface: Symbol
      Get the program associated with this symbol
      Specified by:
      getProgram in interface Symbol
      Returns:
      the program associated with this symbol.
    • getName

      public 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 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 TaskMonitor.DUMMY 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.
    • getReferences

      public Reference[] getReferences()
      Description copied from interface: Symbol
      Returns all memory references to the address of this symbol.
      Specified by:
      getReferences in interface Symbol
      Returns:
      all memory references to the address of this symbol
      See Also:
    • 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:
      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(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
    • setNamespace

      public void setNamespace(Namespace newNamespace) throws DuplicateNameException, InvalidInputException, CircularDependencyException
      Description copied from interface: Symbol
      Sets the symbols namespace
      Specified by:
      setNamespace in interface Symbol
      Parameters:
      newNamespace - new parent namespace
      Throws:
      DuplicateNameException - if newNamespace already contains a symbol with this symbol's name
      InvalidInputException - is newNamespace is not a valid parent for this symbol
      CircularDependencyException - if this symbol is an ancestor of newNamespace
    • validateNameSource

      protected SourceType validateNameSource(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
    • doSetNameAndNamespace

      public void doSetNameAndNamespace(String newName, Namespace newNamespace, SourceType source, boolean checkForDuplicates) throws DuplicateNameException, InvalidInputException, CircularDependencyException
      Throws:
      DuplicateNameException
      InvalidInputException
      CircularDependencyException
    • setNameAndNamespace

      public void setNameAndNamespace(String newName, Namespace newNamespace, SourceType source) throws DuplicateNameException, InvalidInputException, CircularDependencyException
      Description copied from interface: Symbol
      Sets the symbols name and namespace. This is provided to allow the caller to avoid a name conflict by creating an autonomous action.
      Specified by:
      setNameAndNamespace in interface Symbol
      Parameters:
      newName - new symbol name
      newNamespace - new parent namespace
      source - the source of this symbol
      Some symbol types, such as function symbols, can set the source to Symbol.DEFAULT.
      Throws:
      DuplicateNameException - if newNamespace already contains a symbol with this symbol's name
      InvalidInputException - is newNamespace is not a valid parent for this symbol
      CircularDependencyException - if this symbol is an ancestor of newNamespace
    • getSymbolsDynamicallyRenamedByMyRename

      protected 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:
    • getID

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

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class 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 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(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 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