Package ghidra.program.database.symbol

# Class VariableSymbolDB

java.lang.Object
ghidra.program.database.DatabaseObject
ghidra.program.database.symbol.SymbolDB
ghidra.program.database.symbol.VariableSymbolDB

All Implemented Interfaces:
  `Symbol`

Direct Known Subclasses:
  `GlobalVariableSymbolDB`

public class VariableSymbolDB extends SymbolDB
Symbol class for function variables. Symbol Data Usage: String stringData - variable comment

- ## Field Summary

  ### Fields inherited from class ghidra.program.database.symbol.SymbolDB

  `address, lock, symbolMgr`

  ### Fields inherited from class ghidra.program.database.DatabaseObject

  `key`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `VariableSymbolDB(SymbolManager symbolMgr, DBObjectCache<SymbolDB> cache, SymbolType type, VariableStorageManagerDB variableMgr, Address address, DBRecord record)`
  Constructs a new VariableSymbol

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `delete()`
  Delete the symbol and its associated resources.
  `protected String`
  `doGetName()`
  The code for creating the name content for this symbol.
  `boolean`
  `equals(Object obj)`
  `DataType`
  `getDataType()`
  `int`
  `getFirstUseOffset()`
  `FunctionDB`
  `getFunction()`
  `Object`
  `getObject()`
  `int`
  `getOrdinal()`
  `ProgramLocation`
  `getProgramLocation()`
  `int`
  `getReferenceCount()`
  `Reference[]`
  `getReferences(TaskMonitor monitor)`
  Returns all memory references to the address of this symbol.
  `SymbolType`
  `getSymbolType()`
  Returns this symbol's type
  `VariableStorage`
  `getVariableStorage()`
  `boolean`
  `hasMultipleReferences()`
  `boolean`
  `hasReferences()`
  `boolean`
  `isExternal()`
  Returns true if this an external symbol.
  `boolean`
  `isPrimary()`
  `boolean`
  `isValidParent(Namespace parent)`
  Determines if the given parent is valid for this Symbol.
  `protected boolean`
  `refresh(DBRecord rec)`
  Tells the object to refresh its state from the database using the specified record if not null.
  `void`
  `setFirstUseOffset(int firstUseOffset)`
  `void`
  `setInvalid()`
  Invalidate this object.
  `void`
  `setOrdinal(int ordinal)`
  `void`
  `setStorageAndDataType(VariableStorage newStorage, DataType dt)`
  Change the storage address and data-type associated with this variable symbol.
  `protected SourceType`
  `validateNameSource(String newName, SourceType source)`
  Allow symbol implementations to validate the source when setting the name of this symbol

  ### Methods inherited from class ghidra.program.database.symbol.SymbolDB

  `checkDeleted, doCheckIsPrimary, doGetParentNamespace, doIsPinned, doSetNameAndNamespace, doSetPinned, doSetPrimary, getAddress, getDataTypeId, getID, getName, getName, getParentNamespace, getParentSymbol, getPath, getProgram, getReferences, getSource, getSymbolsDynamicallyRenamedByMyRename, getSymbolStringData, getVariableOffset, hashCode, isDeleted, isDeleting, isDescendant, isDynamic, isExternalEntryPoint, isGlobal, isPinned, moveLowLevel, refresh, setAddress, setDataTypeId, setName, setNameAndNamespace, setNamespace, setPinned, setPrimary, setSource, setSymbolStringData, setVariableOffset, toString`

  ### Methods inherited from class ghidra.program.database.DatabaseObject

  `checkIsValid, checkIsValid, getKey, isDeleted, isInvalid, keyChanged, setDeleted, validate`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### VariableSymbolDB

    public VariableSymbolDB(SymbolManager symbolMgr, DBObjectCache<SymbolDB> cache, SymbolType type, VariableStorageManagerDB variableMgr, Address address, DBRecord record)
    Constructs a new VariableSymbol
    Parameters:
      `symbolMgr` - the symbol manager
      `cache` - symbol object cache
      `type` - the symbol type.
      `variableMgr` - variable storage manager
      `address` - the address of the symbol (stack address)
      `record` - the record for the symbol

- ## Method Details

  - ### setInvalid

    public void setInvalid()
    Description copied from class: `DatabaseObject`
    Invalidate this object. This does not necessarily mean that this object can never be used again. If the object can refresh itself, it may still be useable.
    Overrides:
      `setInvalid` in class `DatabaseObject`

  - ### getVariableStorage

    public VariableStorage getVariableStorage()

  - ### getSymbolType

    public SymbolType getSymbolType()
    Description copied from interface: `Symbol`
    Returns this symbol's type
    Returns:
      symbol type
    See Also:
      - `Symbol.getSymbolType()`

  - ### 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 `SymbolDB`
    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.

  - ### equals

    public boolean equals(Object obj)
    Overrides:
      `equals` in class `SymbolDB`
    See Also:
      - `SymbolDB.equals(java.lang.Object)`

  - ### 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`
    Overrides:
      `delete` in class `SymbolDB`
    Returns:
      true if successful
    See Also:
      - `Symbol.delete()`

  - ### getObject

    public Object getObject()
    Returns:
      object associated with this symbol or null if symbol has been deleted
    See Also:
      - `Symbol.getObject()`

  - ### isPrimary

    public boolean isPrimary()
    Specified by:
      `isPrimary` in interface `Symbol`
    Specified by:
      `isPrimary` in class `SymbolDB`
    Returns:
      true if this symbol is primary
    See Also:
      - `Symbol.isPrimary()`

  - ### isExternal

    public boolean isExternal()
    Description copied from interface: `Symbol`
    Returns true if this an external symbol.
    Returns:
      true if this an external symbol.
    See Also:
      - `Address.isExternalAddress()`

  - ### getFunction

    public FunctionDB getFunction()

  - ### getProgramLocation

    public ProgramLocation getProgramLocation()
    Returns:
      a program location corresponding to this symbol
    See Also:
      - `Symbol.getProgramLocation()`

  - ### 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`
    Overrides:
      `isValidParent` in class `SymbolDB`
    Parameters:
      `parent` - prospective parent namespace for this symbol
    Returns:
      true if parent is valid
    See Also:
      - `Symbol.isValidParent(ghidra.program.model.symbol.Namespace)`

  - ### doGetName

    protected String doGetName()
    Description copied from class: `SymbolDB`
    The code for creating the name content for this symbol. This code will be called with the symbol's lock.
    Overrides:
      `doGetName` in class `SymbolDB`
    Returns:
      the name

  - ### validateNameSource

    protected SourceType validateNameSource(String newName, SourceType source)
    Description copied from class: `SymbolDB`
    Allow symbol implementations to validate the source when setting the name of this symbol
    Overrides:
      `validateNameSource` in class `SymbolDB`
    Parameters:
      `newName` - the new name
      `source` - the source type
    Returns:
      the validated source type

  - ### getDataType

    public DataType getDataType()

  - ### setStorageAndDataType

    public void setStorageAndDataType(VariableStorage newStorage, DataType dt)
    Change the storage address and data-type associated with this variable symbol.
    Parameters:
      `newStorage` -
      `dt` - data-type

  - ### getFirstUseOffset

    public int getFirstUseOffset()

  - ### setFirstUseOffset

    public void setFirstUseOffset(int firstUseOffset)

  - ### getOrdinal

    public int getOrdinal()

  - ### setOrdinal

    public void setOrdinal(int ordinal)

  - ### getReferenceCount

    public int getReferenceCount()
    Specified by:
      `getReferenceCount` in interface `Symbol`
    Overrides:
      `getReferenceCount` in class `SymbolDB`
    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`
    Overrides:
      `getReferences` in class `SymbolDB`
    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`
    Overrides:
      `hasMultipleReferences` in class `SymbolDB`
    Returns:
      true if this symbol has more than one reference to it.

  - ### hasReferences

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