Package ghidra.program.database.symbol

# Class FunctionSymbol

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

All Implemented Interfaces:
  `Symbol`

public class FunctionSymbol extends SymbolDB
Symbol class for functions. Symbol Data Usage: EXTERNAL: String stringData - external memory address/label

- ## 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
  `FunctionSymbol(SymbolManager symbolMgr, DBObjectCache<SymbolDB> cache, Address address, DBRecord record)`
  Construct a new FunctionSymbol

- ## 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.
  `protected Namespace`
  `doGetParentNamespace()`
  `Object`
  `getObject()`
  `ProgramLocation`
  `getProgramLocation()`
  `int`
  `getReferenceCount()`
  `Reference[]`
  `getReferences(TaskMonitor monitor)`
  Returns all memory references to the address of this symbol.
  `protected List<SymbolDB>`
  `getSymbolsDynamicallyRenamedByMyRename()`
  `SymbolType`
  `getSymbolType()`
  Returns this symbol's type
  `boolean`
  `hasMultipleReferences()`
  `boolean`
  `hasReferences()`
  `boolean`
  `isExternal()`
  Returns true if this an external symbol.
  `boolean`
  `isPinned()`
  Returns true if the symbol is pinned to its current address.
  `boolean`
  `isPrimary()`
  `boolean`
  `isValidParent(Namespace parent)`
  Determines if the given parent is valid for this Symbol.
  `void`
  `setNameAndNamespace(String newName, Namespace newNamespace, SourceType source)`
  Sets the symbols name and namespace.
  `void`
  `setPinned(boolean pinned)`
  Sets whether or not this symbol is pinned to its associated address.
  `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, doIsPinned, doSetNameAndNamespace, doSetPinned, doSetPrimary, equals, getAddress, getDataTypeId, getID, getName, getName, getParentNamespace, getParentSymbol, getPath, getProgram, getReferences, getSource, getSymbolStringData, getVariableOffset, hashCode, isDeleted, isDeleting, isDescendant, isDynamic, isExternalEntryPoint, isGlobal, moveLowLevel, refresh, refresh, setAddress, setDataTypeId, setName, setNamespace, setPrimary, setSource, setSymbolStringData, setVariableOffset, toString`

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

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

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

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

- ## Constructor Details

  - ### FunctionSymbol

    public FunctionSymbol(SymbolManager symbolMgr, DBObjectCache<SymbolDB> cache, Address address, DBRecord record)
    Construct a new FunctionSymbol
    Parameters:
      `symbolMgr` - the symbol manager.
      `cache` - symbol object cache
      `address` - the address for this symbol.
      `record` - the record for this symbol.

- ## Method Details

  - ### getSymbolType

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

  - ### 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()`

  - ### 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`
    Overrides:
      `setNameAndNamespace` in class `SymbolDB`
    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

  - ### 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

  - ### getObject

    public Object getObject()
    Returns:
      object associated with this symbol or null if symbol has been deleted

  - ### isPrimary

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

  - ### 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`
    Overrides:
      `isPinned` in class `SymbolDB`
    Returns:
      true if the symbol is pinned to its current address.

  - ### 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`
    Overrides:
      `setPinned` in class `SymbolDB`
    Parameters:
      `pinned` - true indicates this symbol is anchored to its address. false indicates this symbol is not anchored to its address.

  - ### getProgramLocation

    public ProgramLocation getProgramLocation()
    Returns:
      a program location corresponding to this 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`
    Overrides:
      `isValidParent` in class `SymbolDB`
    Parameters:
      `parent` - prospective parent namespace for this symbol
    Returns:
      true if parent is valid

  - ### 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

  - ### doGetParentNamespace

    protected Namespace doGetParentNamespace()
    Overrides:
      `doGetParentNamespace` in class `SymbolDB`

  - ### 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

  - ### getSymbolsDynamicallyRenamedByMyRename

    protected List<SymbolDB> getSymbolsDynamicallyRenamedByMyRename()
    Overrides:
      `getSymbolsDynamicallyRenamedByMyRename` in class `SymbolDB`

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

  - ### getReferenceCount

    public int getReferenceCount()
    Specified by:
      `getReferenceCount` in interface `Symbol`
    Overrides:
      `getReferenceCount` in class `SymbolDB`
    Returns:
      the number of References to 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.