Package ghidra.program.database.symbol
Class SymbolManager
- java.lang.Object
-
- ghidra.program.database.symbol.SymbolManager
-
- All Implemented Interfaces:
ManagerDB
,SymbolTable
public class SymbolManager extends java.lang.Object implements SymbolTable, ManagerDB
-
-
Constructor Summary
Constructors Constructor Description SymbolManager(DBHandle handle, AddressMap addrMap, int openMode, Lock lock, TaskMonitor monitor)
Creates a new Symbol manager.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addExternalEntryPoint(Address addr)
Sets the given address to be an external entry point.GhidraClass
createClass(Namespace parent, java.lang.String name, SourceType source)
Create a class namespace in the given parent namespace.Symbol
createCodeSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String data3)
Internal method for creating label symbols.Library
createExternalLibrary(java.lang.String name, SourceType source)
Creates a Library namespace with the given name.Symbol
createFunctionSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String data3)
Internal method for creating funcions symbols.Symbol
createLabel(Address addr, java.lang.String name, Namespace namespace, SourceType source)
Create a label symbol with the given name associated to the given Address and namespace.Symbol
createLabel(Address addr, java.lang.String name, SourceType source)
Create a label symbol with the given name associated to the given Address.Namespace
createNameSpace(Namespace parent, java.lang.String name, SourceType source)
Creates a new namespace.SymbolDB
createSpecialSymbol(Address addr, java.lang.String name, Namespace parent, SymbolType symbolType, long data1, int data2, java.lang.String data3, SourceType source)
Creates a symbol, specifying all information for the record.Symbol
createSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source)
Symbol
createSymbol(Address addr, java.lang.String name, SourceType source)
VariableSymbolDB
createVariableSymbol(java.lang.String name, Namespace namespace, SymbolType type, int firstUseOffsetOrOrdinal, VariableStorage storage, SourceType source)
Creates variable symbols.void
deleteAddressRange(Address startAddr, Address endAddr, TaskMonitor monitor)
Delete all objects which have been applied to the address range startAddr to endAddr and update the database accordingly.Address
findVariableStorageAddress(VariableStorage storage)
Find previously defined variable storage addressSymbolIterator
getAllSymbols(boolean includeDynamicSymbols)
Returns an iterator over all symbols, including Dynamic symbols if includeDynamicSymbols is true.SymbolIterator
getChildren(Symbol parentSymbol)
Returns an iterator over all symbols that have the given symbol as its parent..java.util.Iterator<GhidraClass>
getClassNamespaces()
Returns all Class Namespaces defined within the program.Symbol
getClassSymbol(java.lang.String name, Namespace namespace)
Returns the class symbol with the given name in the given namespace.SymbolIterator
getDefinedSymbols()
Returns an iterator over all defined symbols in no particular order.long
getDynamicSymbolID(Address addr)
Get the unique symbol ID for a dynamic symbol associated with the speified addr.AddressIterator
getExternalEntryPointIterator()
Get forward/back iterator over addresses that are entry points.Symbol
getExternalSymbol(java.lang.String name)
Returns the external symbol with the given name.SymbolIterator
getExternalSymbols()
Returns an iterator over all defined external symbols in no particular order.SymbolIterator
getExternalSymbols(java.lang.String name)
Returns all the external symbols with the given name.Symbol
getGlobalSymbol(java.lang.String name, Address addr)
Get the global symbol with the given name and address.java.util.List<Symbol>
getGlobalSymbols(java.lang.String name)
Returns a list of all global symbols with the given name.java.util.Iterator<LabelHistory>
getLabelHistory()
Get an iterator over all the label history objects.LabelHistory[]
getLabelHistory(Address addr)
Get the label history objects for the given address.java.util.List<Symbol>
getLabelOrFunctionSymbols(java.lang.String name, Namespace namespace)
Returns all the label or function symbols that have the given name in the given namespace.Symbol
getLibrarySymbol(java.lang.String name)
Returns the library symbol with the given name.Symbol
getLocalVariableSymbol(java.lang.String name, Namespace namespace)
Returns the local variable symbol with the given name in the given namespace.Address
getMaxSymbolAddress(AddressSpace space)
Returns the maximum symbol address within the specified address space.Namespace
getNamespace(Address addr)
Returns the lowest level Namespace within which the specified address is contained.Namespace
getNamespace(java.lang.String name, Namespace namespace)
Returns the namespace with the given name in the given parent namespace.Symbol
getNamespaceSymbol(java.lang.String name, Namespace namespace)
Returns a generic namespace symbol with the given name in the given namespace.Address
getNextExternalSymbolAddress()
Returns the next available external symbol addressint
getNumSymbols()
Returns the total number of symbols in the table.Symbol
getParameterSymbol(java.lang.String name, Namespace namespace)
Returns the parameter symbol with the given name in the given namespace.Symbol
getPrimarySymbol(Address addr)
Returns the primary symbol at the specified address.SymbolIterator
getPrimarySymbolIterator(boolean forward)
Get iterator over all primary symbols.SymbolIterator
getPrimarySymbolIterator(Address startAddr, boolean forward)
Get iterator over only primary symbols starting at the specifiedstartAddr
SymbolIterator
getPrimarySymbolIterator(AddressSetView set, boolean forward)
Get an iterator over symbols at addresses in the given addressSetSymbol
getSymbol(long symbolID)
Get the symbol for the given symbol ID.Symbol
getSymbol(Reference ref)
Returns the symbol that this reference is associated with.Symbol
getSymbol(java.lang.String name)
Returns the first global symbol that it finds with the given name.Symbol
getSymbol(java.lang.String name, Address addr, Namespace namespace)
Get the symbol with the given name, address, and namespace.Symbol
getSymbol(java.lang.String name, Namespace namespace)
Returns the first symbol with the given name found in the given namespace.SymbolIterator
getSymbolIterator()
Get iterator over all label symbols.SymbolIterator
getSymbolIterator(boolean forward)
Returns an iterator over all symbols.SymbolIterator
getSymbolIterator(Address startAddr, boolean forward)
Get iterator over all symbols starting at the specifiedstartAddr
SymbolIterator
getSymbolIterator(java.lang.String searchStr, boolean caseSensitive)
Returns a an iterator over all symbols that match the given search string.SymbolIterator
getSymbols(long namespaceID)
Returns an iterator over all the symbols in the given namespaceSymbol[]
getSymbols(Address addr)
Returns all the symbols at the given address.SymbolIterator
getSymbols(AddressSetView set, SymbolType type, boolean forward)
Returns all the symbols of the given type within the given address set.SymbolIterator
getSymbols(Namespace namespace)
Returns an iterator over all the symbols in the given namespaceSymbolIterator
getSymbols(java.lang.String name)
Returns all the symbols with the given name.java.util.List<Symbol>
getSymbols(java.lang.String name, Namespace namespace)
Returns a list of all symbols with the given name in the given namespace.Symbol[]
getUserSymbols(Address addr)
Returns an array of all user defined symbols at the given addressSymbol
getVariableSymbol(java.lang.String name, Function function)
Returns a symbol that is either a parameter or local variable.boolean
hasLabelHistory(Address addr)
Return true if there is a history of label changes at the given address.boolean
hasSymbol(Address addr)
Return true if there exists a symbol at the given address.void
imageBaseChanged(Address oldBase, Address base)
void
invalidateCache(boolean all)
Clears all data caches.boolean
isExternalEntryPoint(Address addr)
Returns true if the given address has been set as an external entry point.void
migrateFromOldVariableStorageManager(TaskMonitor monitor)
No more sharing the same variable address for multiple variable symbols.void
moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)
Move all objects within an address range to a new location.void
moveSymbolsAt(Address oldAddr, Address newAddr)
Move symbol.void
namespaceRemoved(long namespaceID)
Called by the NamespaceManager when a namespace is removed; remove all symbols that have the given namespace ID.void
programReady(int openMode, int currentRevision, TaskMonitor monitor)
Callback from program made to each manager after the program has completed initialization.void
removeExternalEntryPoint(Address addr)
Removes the given address as an external entry point.boolean
removeSymbolSpecial(Symbol sym)
Removes the specified symbol from the symbol table.void
replaceDataTypes(long oldDataTypeID, long newDataTypeID)
static void
saveLocalSymbol(DBHandle tmpHandle, long symbolID, long oldAddr, java.lang.String name, boolean isPrimary)
Save off old local symbols whose upgrade needs to be deferred until after function manager upgrade has been completed.void
setLanguage(LanguageTranslator translator, TaskMonitor monitor)
void
setProgram(ProgramDB program)
Callback from program used to indicate all manager have been created.
-
-
-
Constructor Detail
-
SymbolManager
public SymbolManager(DBHandle handle, AddressMap addrMap, int openMode, Lock lock, TaskMonitor monitor) throws CancelledException, java.io.IOException, VersionException
Creates a new Symbol manager.- Parameters:
handle
- the database handleraddrMap
- the address map.openMode
- the open mode.lock
- the program synchronization lockmonitor
- the progress monitor used when upgrading.- Throws:
CancelledException
- if the user cancels the upgrade.java.io.IOException
- if a database io error occurs.VersionException
- if the database version doesn't match the current version.
-
-
Method Detail
-
findVariableStorageAddress
public Address findVariableStorageAddress(VariableStorage storage) throws java.io.IOException
Find previously defined variable storage address- Parameters:
storage
- variable storage- Returns:
- previously defined variable storage address or null if not found
- Throws:
java.io.IOException
-
setProgram
public void setProgram(ProgramDB program)
Description copied from interface:ManagerDB
Callback from program used to indicate all manager have been created. When this method is invoked, all managers have been instantiated but may not be fully initialized.- Specified by:
setProgram
in interfaceManagerDB
- Parameters:
program
- the program is set when all the initializations have been completed.
-
programReady
public void programReady(int openMode, int currentRevision, TaskMonitor monitor) throws java.io.IOException, CancelledException
Description copied from interface:ManagerDB
Callback from program made to each manager after the program has completed initialization. This method may be used by managers to perform additional upgrading which may have been deferred.- Specified by:
programReady
in interfaceManagerDB
- Parameters:
openMode
- the mode that the program is being opened.currentRevision
- current program revision. If openMode is UPGRADE, this value reflects the pre-upgrade value.monitor
- the task monitor to use in any upgrade operations.- Throws:
java.io.IOException
- if a database io error occurs.CancelledException
- if the user cancelled the operation via the task monitor.
-
migrateFromOldVariableStorageManager
public void migrateFromOldVariableStorageManager(TaskMonitor monitor) throws CancelledException
No more sharing the same variable address for multiple variable symbols. Must split these up. Only reference to variable addresses should be the symbol address - reference refer to physical/stack addresses, and symbolIDs.- Parameters:
monitor
-- Throws:
CancelledException
-
saveLocalSymbol
public static void saveLocalSymbol(DBHandle tmpHandle, long symbolID, long oldAddr, java.lang.String name, boolean isPrimary) throws java.io.IOException
Save off old local symbols whose upgrade needs to be deferred until after function manager upgrade has been completed.- Parameters:
tmpHandle
- scratch pad database handlesymbolID
- local symbol IDoldAddr
- old address value from symbol tablename
- symbol nameisPrimary
- true if symbol is primary at oldAddr- Throws:
java.io.IOException
-
getNumSymbols
public int getNumSymbols()
Description copied from interface:SymbolTable
Returns the total number of symbols in the table.- Specified by:
getNumSymbols
in interfaceSymbolTable
-
removeSymbolSpecial
public boolean removeSymbolSpecial(Symbol sym)
Description copied from interface:SymbolTable
Removes the specified symbol from the symbol table. If removing any non-function symbol the behavior will be the same as invokingSymbol.delete()
on the symbol. Use of this method for non-function symbols is discouraged.WARNING! If removing a function symbol the behavior differs from directly invoking
Symbol.delete()
on the function symbol.When removing a function symbol this method has the following behavior:
- If the function is a default symbol (e.g., FUN_12345678) this method has no affect and will return null
- otherwise if another label exists at the function entry point, that label will be removed and the function will be renamed with that labels name
- If no other labels exist at the function entry, the function will be renamed to the default function name
- Specified by:
removeSymbolSpecial
in interfaceSymbolTable
- Parameters:
sym
- the symbol to be removed.- Returns:
- false, if removal of the symbol fails
-
hasSymbol
public boolean hasSymbol(Address addr)
Description copied from interface:SymbolTable
Return true if there exists a symbol at the given address.- Specified by:
hasSymbol
in interfaceSymbolTable
- Parameters:
addr
- address to check for an existing symbol- Returns:
- true if any symbol exists
-
getSymbol
public Symbol getSymbol(long symbolID)
Description copied from interface:SymbolTable
Get the symbol for the given symbol ID.- Specified by:
getSymbol
in interfaceSymbolTable
- Parameters:
symbolID
- the id of the symbol to be retrieved.- Returns:
- null if there is no symbol with the given ID.
-
getSymbols
public Symbol[] getSymbols(Address addr)
Description copied from interface:SymbolTable
Returns all the symbols at the given address. When addr is a memory address the primary symbol will be returned in array slot 0. WARNING! Use of this method with a Variable address is highly discouraged since a single Variable address could be used multiple times by many functions.- Specified by:
getSymbols
in interfaceSymbolTable
- Parameters:
addr
- the address at which to retrieve all symbols.- Returns:
- a zero-length array when no symbols are defined at address.
-
getUserSymbols
public Symbol[] getUserSymbols(Address addr)
Description copied from interface:SymbolTable
Returns an array of all user defined symbols at the given address- Specified by:
getUserSymbols
in interfaceSymbolTable
- Parameters:
addr
- the address at which to retrieve all user defined symbols.
-
getSymbol
public Symbol getSymbol(java.lang.String name, Address addr, Namespace namespace)
Description copied from interface:SymbolTable
Get the symbol with the given name, address, and namespace.Note that for a symbol to be uniquely specified, all these parameters are required. Any method that queries for symbols using just one or two of these parameters will return a list of symbols.
- Specified by:
getSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the symbol to retrieveaddr
- the address of the symbol to retrievenamespace
- the namespace of the symbol to retrieve. May be null which indicates global namespace.
-
getSymbol
public Symbol getSymbol(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns the first symbol with the given name found in the given namespace. Ghidra now allows multiple symbols with the same name in the same namespace, so using this method is likely to produce unintended results. Use#getSymbols(Namespace, String)
instead.- Specified by:
getSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the symbol to retreivenamespace
- the namespace of the symbol to retrieve (null assumes global namespace)
-
getGlobalSymbol
public Symbol getGlobalSymbol(java.lang.String name, Address addr)
Description copied from interface:SymbolTable
Get the global symbol with the given name and address. Note that this results in a single Symbol because of an additional restriction that allows only one symbol with a given name at the same address and namespace (in this case the global namespace).This is just a convenience method for
SymbolTable.getSymbol(String, Address, Namespace)
where the namespace is the global namespace.- Specified by:
getGlobalSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the symbol to retrieveaddr
- the address of the symbol to retrieve
-
getSymbol
public Symbol getSymbol(java.lang.String name)
Description copied from interface:SymbolTable
Returns the first global symbol that it finds with the given name. Now that Ghidra allows duplicate symbol names, this method is practically useless.- Specified by:
getSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the symbol to be retrieved.- Returns:
- symbol, or null if no global symbol has that name
-
getGlobalSymbols
public java.util.List<Symbol> getGlobalSymbols(java.lang.String name)
Description copied from interface:SymbolTable
Returns a list of all global symbols with the given name.- Specified by:
getGlobalSymbols
in interfaceSymbolTable
- Parameters:
name
- the name of the symbols to retrieve.- Returns:
- a list of all global symbols with the given name.
-
getLibrarySymbol
public Symbol getLibrarySymbol(java.lang.String name)
Description copied from interface:SymbolTable
Returns the library symbol with the given name.- Specified by:
getLibrarySymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the library symbol to retrieve.- Returns:
- the library symbol with the given name.
-
getSymbols
public java.util.List<Symbol> getSymbols(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns a list of all symbols with the given name in the given namespace.- Specified by:
getSymbols
in interfaceSymbolTable
- Parameters:
name
- the name of the symbols to retrieve.namespace
- the namespace to search for symbols.- Returns:
-
getNamespace
public Namespace getNamespace(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns the namespace with the given name in the given parent namespace. The namespace returned can be either a generic namespace or a class or library. It does not include functions.- Specified by:
getNamespace
in interfaceSymbolTable
- Parameters:
name
- the name of the namespace to be retrieved.namespace
- the parent namespace of the namespace to be retrieved.- Returns:
- the namespace with the given name in the given parent namespace.
-
getSymbols
public SymbolIterator getSymbols(Namespace namespace)
Description copied from interface:SymbolTable
Returns an iterator over all the symbols in the given namespace- Specified by:
getSymbols
in interfaceSymbolTable
- Parameters:
namespace
- the namespace to search for symbols.
-
getSymbols
public SymbolIterator getSymbols(long namespaceID)
Description copied from interface:SymbolTable
Returns an iterator over all the symbols in the given namespace- Specified by:
getSymbols
in interfaceSymbolTable
- Parameters:
namespaceID
- the namespace ID to search for symbols.
-
getSymbols
public SymbolIterator getSymbols(java.lang.String name)
Description copied from interface:SymbolTable
Returns all the symbols with the given name.- Specified by:
getSymbols
in interfaceSymbolTable
- Parameters:
name
- the name of symbols to search for.- Returns:
- array of symbols with the given name
-
getPrimarySymbol
public Symbol getPrimarySymbol(Address addr)
Description copied from interface:SymbolTable
Returns the primary symbol at the specified address. This method will always return null if the address specified is neither a Memory address nor an External address.- Specified by:
getPrimarySymbol
in interfaceSymbolTable
- Parameters:
addr
- the address at which to retrieve the primary symbol- Returns:
- symbol, or null if no symbol at that address
-
getSymbol
public Symbol getSymbol(Reference ref)
Description copied from interface:SymbolTable
Returns the symbol that this reference is associated with.- Specified by:
getSymbol
in interfaceSymbolTable
- Parameters:
ref
- the reference to find the associated symbol for.
-
getMaxSymbolAddress
public Address getMaxSymbolAddress(AddressSpace space)
Returns the maximum symbol address within the specified address space.- Parameters:
space
- address space- Returns:
- maximum symbol address within space or null if none are found.
-
getNextExternalSymbolAddress
public Address getNextExternalSymbolAddress()
Returns the next available external symbol address- Returns:
-
getPrimarySymbolIterator
public SymbolIterator getPrimarySymbolIterator(Address startAddr, boolean forward)
Description copied from interface:SymbolTable
Get iterator over only primary symbols starting at the specifiedstartAddr
- Specified by:
getPrimarySymbolIterator
in interfaceSymbolTable
- Parameters:
startAddr
- the address at which to begin the iteration.forward
- true means the iterator is in the forward direction
-
getPrimarySymbolIterator
public SymbolIterator getPrimarySymbolIterator(AddressSetView set, boolean forward)
Description copied from interface:SymbolTable
Get an iterator over symbols at addresses in the given addressSet- Specified by:
getPrimarySymbolIterator
in interfaceSymbolTable
- Parameters:
set
- the set of address over which to iterate symbols.forward
- true means the iterator is in the forward direction
-
getSymbols
public SymbolIterator getSymbols(AddressSetView set, SymbolType type, boolean forward)
Description copied from interface:SymbolTable
Returns all the symbols of the given type within the given address set.- Specified by:
getSymbols
in interfaceSymbolTable
- Parameters:
set
- the address set in which to look for symbols of the given typetype
- the SymbolType to look for.forward
- the direction within the addressSet to search
-
getPrimarySymbolIterator
public SymbolIterator getPrimarySymbolIterator(boolean forward)
Description copied from interface:SymbolTable
Get iterator over all primary symbols.- Specified by:
getPrimarySymbolIterator
in interfaceSymbolTable
- Parameters:
forward
- true means the iterator is in the forward direction
-
getSymbolIterator
public SymbolIterator getSymbolIterator(Address startAddr, boolean forward)
Description copied from interface:SymbolTable
Get iterator over all symbols starting at the specifiedstartAddr
- Specified by:
getSymbolIterator
in interfaceSymbolTable
- Parameters:
startAddr
- the address at which to begin the iteration.forward
- true means the iterator is in the forward direction
-
getSymbolIterator
public SymbolIterator getSymbolIterator()
Description copied from interface:SymbolTable
Get iterator over all label symbols. Labels are defined on memory locations.- Specified by:
getSymbolIterator
in interfaceSymbolTable
-
getAllSymbols
public SymbolIterator getAllSymbols(boolean includeDynamicSymbols)
Description copied from interface:SymbolTable
Returns an iterator over all symbols, including Dynamic symbols if includeDynamicSymbols is true.- Specified by:
getAllSymbols
in interfaceSymbolTable
- Parameters:
includeDynamicSymbols
- if true, the iterator will include dynamicSymbols
-
getSymbolIterator
public SymbolIterator getSymbolIterator(boolean forward)
Description copied from interface:SymbolTable
Returns an iterator over all symbols.- Specified by:
getSymbolIterator
in interfaceSymbolTable
- Parameters:
forward
- true means the iterator is in the forward direction
-
getSymbolIterator
public SymbolIterator getSymbolIterator(java.lang.String searchStr, boolean caseSensitive)
Description copied from interface:SymbolTable
Returns a an iterator over all symbols that match the given search string. NOTE: The iterator is in the forward direction only.- Specified by:
getSymbolIterator
in interfaceSymbolTable
- Parameters:
searchStr
- the string to search for (may contain * to match any sequence or ? to match a single char)caseSensitive
- flag to determine if the search is case sensitive or not.
-
addExternalEntryPoint
public void addExternalEntryPoint(Address addr)
Description copied from interface:SymbolTable
Sets the given address to be an external entry point.- Specified by:
addExternalEntryPoint
in interfaceSymbolTable
- Parameters:
addr
- the address to set as an external entry point.
-
getExternalEntryPointIterator
public AddressIterator getExternalEntryPointIterator()
Description copied from interface:SymbolTable
Get forward/back iterator over addresses that are entry points.- Specified by:
getExternalEntryPointIterator
in interfaceSymbolTable
-
isExternalEntryPoint
public boolean isExternalEntryPoint(Address addr)
Description copied from interface:SymbolTable
Returns true if the given address has been set as an external entry point.- Specified by:
isExternalEntryPoint
in interfaceSymbolTable
- Parameters:
addr
- address to test for external entry point.
-
removeExternalEntryPoint
public void removeExternalEntryPoint(Address addr)
Description copied from interface:SymbolTable
Removes the given address as an external entry point.- Specified by:
removeExternalEntryPoint
in interfaceSymbolTable
- Parameters:
addr
- the address to remove as an external entry point.
-
hasLabelHistory
public boolean hasLabelHistory(Address addr)
Description copied from interface:SymbolTable
Return true if there is a history of label changes at the given address.- Specified by:
hasLabelHistory
in interfaceSymbolTable
- Parameters:
addr
- the address to check for symbol history.
-
getLabelHistory
public java.util.Iterator<LabelHistory> getLabelHistory()
Description copied from interface:SymbolTable
Get an iterator over all the label history objects.- Specified by:
getLabelHistory
in interfaceSymbolTable
-
getLabelHistory
public LabelHistory[] getLabelHistory(Address addr)
Description copied from interface:SymbolTable
Get the label history objects for the given address. The history object records changes made to labels at some address.- Specified by:
getLabelHistory
in interfaceSymbolTable
- Parameters:
addr
- address of the label change- Returns:
- array of history objects
-
invalidateCache
public void invalidateCache(boolean all)
Description copied from interface:ManagerDB
Clears all data caches.- Specified by:
invalidateCache
in interfaceManagerDB
- Parameters:
all
- if false, some managers may not need to update their cache if they can tell that its not necessary. If this flag is true, then all managers should clear their cache no matter what.
-
moveSymbolsAt
public void moveSymbolsAt(Address oldAddr, Address newAddr)
Move symbol. Only symbol address is changed. References must be moved separately.- Parameters:
fromAddr
-toAddr
-
-
getDynamicSymbolID
public long getDynamicSymbolID(Address addr)
Description copied from interface:SymbolTable
Get the unique symbol ID for a dynamic symbol associated with the speified addr. The generation of this symbol ID does not reflect the presence of a dyanmic symbol at the specified addr. This symbol ID should not be permanently stored since the encoding may change between software releases.- Specified by:
getDynamicSymbolID
in interfaceSymbolTable
- Parameters:
addr
- dynamic symbol address- Returns:
- unique symbol ID
-
namespaceRemoved
public void namespaceRemoved(long namespaceID)
Called by the NamespaceManager when a namespace is removed; remove all symbols that have the given namespace ID.- Parameters:
namespaceID
- ID of namespace being removed
-
getNamespace
public Namespace getNamespace(Address addr)
Description copied from interface:SymbolTable
Returns the lowest level Namespace within which the specified address is contained.- Specified by:
getNamespace
in interfaceSymbolTable
- Parameters:
addr
- the address for which to finds its enclosing namespace.
-
getClassNamespaces
public java.util.Iterator<GhidraClass> getClassNamespaces()
Description copied from interface:SymbolTable
Returns all Class Namespaces defined within the program.- Specified by:
getClassNamespaces
in interfaceSymbolTable
-
getDefinedSymbols
public SymbolIterator getDefinedSymbols()
Description copied from interface:SymbolTable
Returns an iterator over all defined symbols in no particular order.- Specified by:
getDefinedSymbols
in interfaceSymbolTable
-
getExternalSymbol
public Symbol getExternalSymbol(java.lang.String name)
Description copied from interface:SymbolTable
Returns the external symbol with the given name.- Specified by:
getExternalSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the symbol to be retrieved.- Returns:
- symbol, or null if no external symbol has that name
-
getExternalSymbols
public SymbolIterator getExternalSymbols(java.lang.String name)
Description copied from interface:SymbolTable
Returns all the external symbols with the given name.- Specified by:
getExternalSymbols
in interfaceSymbolTable
- Parameters:
name
- the name of symbols to search for.- Returns:
- array of external symbols with the given name
-
getExternalSymbols
public SymbolIterator getExternalSymbols()
Description copied from interface:SymbolTable
Returns an iterator over all defined external symbols in no particular order.- Specified by:
getExternalSymbols
in interfaceSymbolTable
-
getChildren
public SymbolIterator getChildren(Symbol parentSymbol)
Description copied from interface:SymbolTable
Returns an iterator over all symbols that have the given symbol as its parent..- Specified by:
getChildren
in interfaceSymbolTable
- Parameters:
parentSymbol
- the parent symbol
-
setLanguage
public void setLanguage(LanguageTranslator translator, TaskMonitor monitor) throws CancelledException
- Throws:
CancelledException
-
replaceDataTypes
public void replaceDataTypes(long oldDataTypeID, long newDataTypeID)
-
moveAddressRange
public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor) throws CancelledException
Description copied from interface:ManagerDB
Move all objects within an address range to a new location.- Specified by:
moveAddressRange
in interfaceManagerDB
- Parameters:
fromAddr
- the first address of the range to be moved.toAddr
- the address where to the range is to be moved.length
- the number of addresses to move.monitor
- the task monitor to use in any upgrade operations.- Throws:
CancelledException
- if the user cancelled the operation via the task monitor.
-
deleteAddressRange
public void deleteAddressRange(Address startAddr, Address endAddr, TaskMonitor monitor) throws CancelledException
Description copied from interface:ManagerDB
Delete all objects which have been applied to the address range startAddr to endAddr and update the database accordingly.- Specified by:
deleteAddressRange
in interfaceManagerDB
- Parameters:
startAddr
- the first address in the range.endAddr
- the last address in the range.monitor
- the task monitor to use in any upgrade operations.- Throws:
CancelledException
- if the user cancelled the operation via the task monitor.
-
createVariableSymbol
public VariableSymbolDB createVariableSymbol(java.lang.String name, Namespace namespace, SymbolType type, int firstUseOffsetOrOrdinal, VariableStorage storage, SourceType source) throws DuplicateNameException, InvalidInputException
Creates variable symbols. Note this is not a method defined in the Symbol Table interface. It is intended to be used by Ghidra program internals.- Parameters:
name
- the name of the variablenamespace
- the function that contains the variable.type
- the type of the variable (can only be PARAMETER or LOCAL_VAR)firstUseOffsetOrOrdinal
- the offset in the function where the variable is first used.storage
- the VariableStorage (stack, registers, etc.)source
- the symbol source type (user defined, analysis, etc.)- Returns:
- the new VariableSymbol that was created.
- Throws:
DuplicateNameException
- if there is another variable in this function with that name.InvalidInputException
- if the name contains illegal characters (space for example)
-
createClass
public GhidraClass createClass(Namespace parent, java.lang.String name, SourceType source) throws DuplicateNameException, InvalidInputException
Description copied from interface:SymbolTable
Create a class namespace in the given parent namespace.- Specified by:
createClass
in interfaceSymbolTable
- Parameters:
parent
- parent namespacename
- name of the namespacesource
- the source of this class namespace's symbol- Returns:
- new class namespace
- Throws:
DuplicateNameException
- thrown if another non function or lable symbol exists with the given nameInvalidInputException
- throw if the name has invalid characters or is null
-
createExternalLibrary
public Library createExternalLibrary(java.lang.String name, SourceType source) throws DuplicateNameException, InvalidInputException
Description copied from interface:SymbolTable
Creates a Library namespace with the given name.- Specified by:
createExternalLibrary
in interfaceSymbolTable
- Parameters:
name
- the name of the new Library namespacesource
- the source of this external library's symbol- Returns:
- the new Library namespace.
- Throws:
DuplicateNameException
- thrown if another non function or lable symbol exists with the given nameInvalidInputException
-
createNameSpace
public Namespace createNameSpace(Namespace parent, java.lang.String name, SourceType source) throws DuplicateNameException, InvalidInputException
Description copied from interface:SymbolTable
Creates a new namespace.- Specified by:
createNameSpace
in interfaceSymbolTable
- Parameters:
parent
- the parent namespace for the new namespacename
- the name of the new namespacesource
- the source of this namespace's symbol- Returns:
- the new Namespace object.
- Throws:
DuplicateNameException
- thrown if another non function or lable symbol exists with the given nameInvalidInputException
- if the name is invalid.
-
createSpecialSymbol
public SymbolDB createSpecialSymbol(Address addr, java.lang.String name, Namespace parent, SymbolType symbolType, long data1, int data2, java.lang.String data3, SourceType source) throws DuplicateNameException, InvalidInputException
Creates a symbol, specifying all information for the record. This method is not on the public interface and is only intended for program API internal use. The user of this method must carefully provided exactly the information needed depending on the type of symbol being created.- Parameters:
addr
- the address for the symbolname
- the name of the symbolparent
- the namespace for the symbolsymbolType
- the type of the symboldata1
- long value whose meaning depends on the symbol type.data2
- int value whose meaning depends on the symbol type.data3
- string value whose meaning depends on the symbol type.source
- the SourceType for the new symbol- Returns:
- the newly created symbol
- Throws:
DuplicateNameException
- if the symbol type must be unique and another already has that name in the given namespace.InvalidInputException
- if the name contains any illegal characters (i.e. space)
-
createSymbol
public Symbol createSymbol(Address addr, java.lang.String name, SourceType source) throws InvalidInputException
- Specified by:
createSymbol
in interfaceSymbolTable
- Throws:
InvalidInputException
-
createLabel
public Symbol createLabel(Address addr, java.lang.String name, SourceType source) throws InvalidInputException
Description copied from interface:SymbolTable
Create a label symbol with the given name associated to the given Address. The symbol will be global and be of type SymbolType.CODE. Label Symbols do not have to have unique names. If this is the first symbol defined for the address it becomes the primary.- Specified by:
createLabel
in interfaceSymbolTable
- Parameters:
addr
- the address at which to create a symbolname
- the name of the symbol.source
- the source of this symbol
Some symbol types, such as function symbols, can set the source to Symbol.DEFAULT.- Throws:
InvalidInputException
- thrown if names contains white space, is zero length, or is null. Also thrown if invalid parentNamespace is specified.
-
createSymbol
public Symbol createSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source) throws InvalidInputException, DuplicateNameException
- Specified by:
createSymbol
in interfaceSymbolTable
- Throws:
InvalidInputException
DuplicateNameException
-
createLabel
public Symbol createLabel(Address addr, java.lang.String name, Namespace namespace, SourceType source) throws InvalidInputException
Description copied from interface:SymbolTable
Create a label symbol with the given name associated to the given Address and namespace. The symbol will be of type SymbolType.CODE. If this is the first symbol defined for the address it becomes the primary symbol. If a symbol with that name already exists at the address, it will be returned instead with its namespace changed to the new namespace unless the new symbol is in the global space, in which case the namespace will remain as is.- Specified by:
createLabel
in interfaceSymbolTable
- Parameters:
addr
- the address at which to create a symbolname
- the name of the symbol.namespace
- the namespace of the symbol.source
- the source of this symbol
Some symbol types, such as function symbols, can set the source to Symbol.DEFAULT.- Throws:
InvalidInputException
-
createCodeSymbol
public Symbol createCodeSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String data3) throws InvalidInputException
Internal method for creating label symbols.- Parameters:
addr
- the address for the new symbolname
- the name of the new symbolnamespace
- the namespace for the new symbolsource
- the SourceType of the new symboldata3
- special use depending on the symbol type and whether or not it is external- Returns:
- the new symbol
- Throws:
InvalidInputException
- if the name contains illegal characters (i.e. space)
-
createFunctionSymbol
public Symbol createFunctionSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String data3) throws InvalidInputException
Internal method for creating funcions symbols.- Parameters:
addr
- the address for the new symbolname
- the name of the new symbolnamespace
- the namespace for the new symbolsource
- the SourceType of the new symboldata3
- special use depending on the symbol type and whether or not it is external.- Returns:
- the new symbol
- Throws:
InvalidInputException
- if the name contains illegal characters (i.e. space)
-
getClassSymbol
public Symbol getClassSymbol(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns the class symbol with the given name in the given namespace.- Specified by:
getClassSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the class.namespace
- the namespace to search for the class.- Returns:
- the class symbol with the given name in the given namespace.
-
getParameterSymbol
public Symbol getParameterSymbol(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns the parameter symbol with the given name in the given namespace.- Specified by:
getParameterSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the parameter.namespace
- the namespace (function) to search for the class.- Returns:
- the parameter symbol with the given name in the given namespace.
-
getLocalVariableSymbol
public Symbol getLocalVariableSymbol(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns the local variable symbol with the given name in the given namespace.- Specified by:
getLocalVariableSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the local variable.namespace
- the namespace (function) to search for the class.- Returns:
- the local variable symbol with the given name in the given namespace.
-
getNamespaceSymbol
public Symbol getNamespaceSymbol(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns a generic namespace symbol with the given name in the given namespace.- Specified by:
getNamespaceSymbol
in interfaceSymbolTable
- Parameters:
name
- the name of the namespace symbol to retrieve.namespace
- the namespace containing the symbol to retrieve.- Returns:
- a generic namespace symbol with the given name in the given namespace.
-
getLabelOrFunctionSymbols
public java.util.List<Symbol> getLabelOrFunctionSymbols(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTable
Returns all the label or function symbols that have the given name in the given namespace.- Specified by:
getLabelOrFunctionSymbols
in interfaceSymbolTable
- Parameters:
name
- the name of the symbols to search for.namespace
- the namespace to search. If null, then the global namespace is assumed.- Returns:
- a list of all the label or function symbols with the given name in the given namespace.
-
getVariableSymbol
public Symbol getVariableSymbol(java.lang.String name, Function function)
Description copied from interface:SymbolTable
Returns a symbol that is either a parameter or local variable. There can be only one because these symbol types have a unique name requirement.- Specified by:
getVariableSymbol
in interfaceSymbolTable
- Parameters:
name
- the naem of the variable.- Returns:
- a parameter or local variable symbol with the given name.
-
-