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
-
-
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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleandelete()Delete the symbol and its associated resources.protected java.lang.StringdoGetName()The code for creating the name content for this symbol.booleanequals(java.lang.Object obj)DataTypegetDataType()intgetFirstUseOffset()FunctionDBgetFunction()java.lang.ObjectgetObject()intgetOrdinal()ProgramLocationgetProgramLocation()intgetReferenceCount()Reference[]getReferences(TaskMonitor monitor)Returns all memory references to the address of this symbol.SymbolTypegetSymbolType()Returns this symbol's typeVariableStoragegetVariableStorage()booleanhasMultipleReferences()booleanhasReferences()booleanisExternal()Returns true if this an external symbol.booleanisPrimary()booleanisValidParent(Namespace parent)Determines if the given parent is valid for this Symbol.protected booleanrefresh(DBRecord rec)Tells the object to refresh its state from the database using the specified record if not null.voidsetFirstUseOffset(int firstUseOffset)voidsetInvalid()Invalidate this object.voidsetOrdinal(int ordinal)voidsetStorageAndDataType(VariableStorage newStorage, DataType dt)Change the storage address and data-type associated with this variable symbol.protected SourceTypevalidateNameSource(java.lang.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, validate
-
-
-
-
Constructor Detail
-
VariableSymbolDB
public VariableSymbolDB(SymbolManager symbolMgr, DBObjectCache<SymbolDB> cache, SymbolType type, VariableStorageManagerDB variableMgr, Address address, DBRecord record)
Constructs a new VariableSymbol- Parameters:
symbolMgr- the symbol managercache- symbol object cachetype- the symbol type.address- the address of the symbol (stack address)record- the record for the symbol
-
-
Method Detail
-
setInvalid
public void setInvalid()
Description copied from class:DatabaseObjectInvalidate 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:
setInvalidin classDatabaseObject
-
getVariableStorage
public VariableStorage getVariableStorage()
-
getSymbolType
public SymbolType getSymbolType()
Description copied from interface:SymbolReturns this symbol's type- Returns:
- symbol type
- See Also:
Symbol.getSymbolType()
-
refresh
protected boolean refresh(DBRecord rec)
Description copied from class:DatabaseObjectTells 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:
refreshin classSymbolDB- 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(java.lang.Object obj)
- Overrides:
equalsin classSymbolDB- See Also:
SymbolDB.equals(java.lang.Object)
-
delete
public boolean delete()
Description copied from interface:SymbolDelete the symbol and its associated resources. Any references symbol associations will be discarded.- Specified by:
deletein interfaceSymbol- Overrides:
deletein classSymbolDB- Returns:
- true if successful
- See Also:
Symbol.delete()
-
getObject
public java.lang.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:
isPrimaryin interfaceSymbol- Specified by:
isPrimaryin classSymbolDB- Returns:
- true if this symbol is primary
- See Also:
Symbol.isPrimary()
-
isExternal
public boolean isExternal()
Description copied from interface:SymbolReturns 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:SymbolDetermines if the given parent is valid for this Symbol. Specified namespace must belong to the same symbol table as this symbol.- Specified by:
isValidParentin interfaceSymbol- Specified by:
isValidParentin classSymbolDB- 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 java.lang.String doGetName()
Description copied from class:SymbolDBThe code for creating the name content for this symbol. This code will be called with the symbol's lock.
-
validateNameSource
protected SourceType validateNameSource(java.lang.String newName, SourceType source)
Description copied from class:SymbolDBAllow symbol implementations to validate the source when setting the name of this symbol- Overrides:
validateNameSourcein classSymbolDB- Parameters:
newName- the new namesource- 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:
getReferenceCountin interfaceSymbol- Overrides:
getReferenceCountin classSymbolDB- Returns:
- the number of References to this symbol.
-
getReferences
public Reference[] getReferences(TaskMonitor monitor)
Description copied from interface:SymbolReturns all memory references to the address of this symbol. If you do not have aTaskMonitorinstance, then you can passTaskMonitorAdapter.DUMMY_MONITORornull.- Specified by:
getReferencesin interfaceSymbol- Overrides:
getReferencesin classSymbolDB- 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:
hasMultipleReferencesin interfaceSymbol- Overrides:
hasMultipleReferencesin classSymbolDB- Returns:
- true if this symbol has more than one reference to it.
-
hasReferences
public boolean hasReferences()
- Specified by:
hasReferencesin interfaceSymbol- Overrides:
hasReferencesin classSymbolDB- Returns:
- true if this symbol has at least one reference to it.
-
-