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 Instance Methods Concrete Methods Modifier and Type Method Description voidaddExternalEntryPoint(Address addr)Sets the given address to be an external entry point.GhidraClassconvertNamespaceToClass(Namespace namespace)Converts the given namespace to a class namespaceGhidraClasscreateClass(Namespace parent, java.lang.String name, SourceType source)Create a class namespace in the given parent namespace.SymbolcreateCodeSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String stringData)Internal method for creating label symbols.LibrarycreateExternalLibrary(java.lang.String name, SourceType source)Creates a Library namespace with the given name.SymbolcreateFunctionSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String stringData)Internal method for creating function symbolsSymbolcreateLabel(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.SymbolcreateLabel(Address addr, java.lang.String name, SourceType source)Create a label symbol with the given name associated to the given Address.SymbolDBcreateLibrarySymbol(java.lang.String name, java.lang.String pathname, SourceType source)Create a Library symbol with the specified name and optional pathnameNamespacecreateNameSpace(Namespace parent, java.lang.String name, SourceType source)Creates a new namespace.VariableSymbolDBcreateVariableSymbol(java.lang.String name, Namespace namespace, SymbolType type, int firstUseOffsetOrOrdinal, VariableStorage storage, SourceType source)Creates variable symbols.voiddeleteAddressRange(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.AddressfindVariableStorageAddress(VariableStorage storage)Find previously defined variable storage addressSymbolIteratorgetAllSymbols(boolean includeDynamicSymbols)Returns an iterator over all symbols, including Dynamic symbols if includeDynamicSymbols is true.SymbolIteratorgetChildren(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 in an arbitrary ordering.SymbolgetClassSymbol(java.lang.String name, Namespace namespace)Returns the class symbol with the given name in the given namespace.SymbolIteratorgetDefinedSymbols()Returns an iterator over all defined symbols in no particular order.longgetDynamicSymbolID(Address addr)Get the unique symbol ID for a dynamic symbol associated with the specified addr.AddressIteratorgetExternalEntryPointIterator()Get forward/back iterator over addresses that are entry points.SymbolgetExternalSymbol(java.lang.String name)Returns the external symbol with the given name.SymbolIteratorgetExternalSymbols()Returns an iterator over all defined external symbols in no particular order.SymbolIteratorgetExternalSymbols(java.lang.String name)Returns all the external symbols with the given name.SymbolgetGlobalSymbol(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.SymbolgetLibrarySymbol(java.lang.String name)Returns the library symbol with the given name.SymbolgetLocalVariableSymbol(java.lang.String name, Namespace namespace)Returns the local variable symbol with the given name in the given namespace.AddressgetMaxSymbolAddress(AddressSpace space)Returns the maximum symbol address within the specified address space.NamespacegetNamespace(Address addr)Returns the lowest level Namespace within which the specified address is contained.NamespacegetNamespace(java.lang.String name, Namespace namespace)Returns the namespace with the given name in the given parent namespace.SymbolgetNamespaceSymbol(java.lang.String name, Namespace namespace)Returns a generic namespace symbol with the given name in the given namespace.AddressgetNextExternalSymbolAddress()Returns the next available external symbol addressintgetNumSymbols()Returns the total number of symbols in the table.NamespacegetOrCreateNameSpace(Namespace parent, java.lang.String name, SourceType source)Gets an existing namespace with the given name in the given parent.SymbolgetParameterSymbol(java.lang.String name, Namespace namespace)Returns the parameter symbol with the given name in the given namespace.SymbolgetPrimarySymbol(Address addr)Returns the primary symbol at the specified address.SymbolIteratorgetPrimarySymbolIterator(boolean forward)Get iterator over all primary symbols.SymbolIteratorgetPrimarySymbolIterator(Address startAddr, boolean forward)Get iterator over only primary symbols starting at the specifiedstartAddrSymbolIteratorgetPrimarySymbolIterator(AddressSetView set, boolean forward)Get an iterator over symbols at addresses in the given addressSetSymbolgetSymbol(long symbolID)Get the symbol for the given symbol ID.SymbolgetSymbol(Reference ref)Returns the symbol that this reference is associated with.SymbolgetSymbol(java.lang.String name, Address address, Namespace namespace)Get the symbol with the given name, address, and namespace.SymbolIteratorgetSymbolIterator()Get iterator over all label symbols.SymbolIteratorgetSymbolIterator(boolean forward)Returns an iterator over all symbols.SymbolIteratorgetSymbolIterator(Address startAddr, boolean forward)Get iterator over all symbols starting at the specifiedstartAddrSymbolIteratorgetSymbolIterator(java.lang.String searchStr, boolean caseSensitive)Returns a an iterator over all symbols that match the given search string.SymbolIteratorgetSymbols(long namespaceID)Returns an iterator over all the symbols in the given namespaceSymbol[]getSymbols(Address addr)Returns all the symbols at the given address.SymbolIteratorgetSymbols(AddressSetView set, SymbolType type, boolean forward)Returns all the symbols of the given type within the given address set.SymbolIteratorgetSymbols(Namespace namespace)Returns an iterator over all the symbols in the given namespaceSymbolIteratorgetSymbols(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.SymbolIteratorgetSymbolsAsIterator(Address addr)Returns a symbol iterator over all the symbols at the given address.Symbol[]getUserSymbols(Address addr)Returns an array of all user defined symbols at the given addressSymbolgetVariableSymbol(java.lang.String name, Function function)Returns a symbol that is either a parameter or local variable.booleanhasLabelHistory(Address addr)Return true if there is a history of label changes at the given address.booleanhasSymbol(Address addr)Return true if there exists a symbol at the given address.voidimageBaseChanged(Address oldBase, Address newBase)voidinvalidateCache(boolean all)Clears all data caches.booleanisExternalEntryPoint(Address addr)Returns true if the given address has been set as an external entry point.voidmigrateFromOldVariableStorageManager(TaskMonitor monitor)No more sharing the same variable address for multiple variable symbols.voidmoveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)Move all objects within an address range to a new location.voidmoveSymbolsAt(Address oldAddr, Address newAddr)Move symbol.voidnamespaceRemoved(long namespaceID)Called by the NamespaceManager when a namespace is removed; remove all symbols that have the given namespace ID.voidprogramReady(int openMode, int currentRevision, TaskMonitor monitor)Callback from program made to each manager after the program has completed initialization.voidremoveExternalEntryPoint(Address addr)Removes the given address as an external entry point.booleanremoveSymbolSpecial(Symbol sym)Removes the specified symbol from the symbol table.voidreplaceDataTypes(long oldDataTypeID, long newDataTypeID)voidsetLanguage(LanguageTranslator translator, TaskMonitor monitor)voidsetProgram(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- if there is database exception
-
setProgram
public void setProgram(ProgramDB program)
Description copied from interface:ManagerDBCallback 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:
setProgramin 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, CancelledExceptionDescription copied from interface:ManagerDBCallback 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:
programReadyin 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- the task monitor- Throws:
CancelledException- if the operation is cancelled
-
getNumSymbols
public int getNumSymbols()
Description copied from interface:SymbolTableReturns the total number of symbols in the table.- Specified by:
getNumSymbolsin interfaceSymbolTable- Returns:
- total number of symbols
-
removeSymbolSpecial
public boolean removeSymbolSpecial(Symbol sym)
Description copied from interface:SymbolTableRemoves 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:
removeSymbolSpecialin 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:SymbolTableReturn true if there exists a symbol at the given address.- Specified by:
hasSymbolin 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:SymbolTableGet the symbol for the given symbol ID.- Specified by:
getSymbolin interfaceSymbolTable- Parameters:
symbolID- the id of the symbol to be retrieved.- Returns:
- null if there is no symbol with the given ID.
-
getSymbolsAsIterator
public SymbolIterator getSymbolsAsIterator(Address addr)
Description copied from interface:SymbolTableReturns a symbol iterator over all the symbols at the given address. Use this instead ofSymbolTable.getSymbols(Address)when you do not need to get all symbols, but rather are searching for a particular symbol. This method prevents all symbols at the given address from being loaded up front.- Specified by:
getSymbolsAsIteratorin interfaceSymbolTable- Parameters:
addr- the address at which to retrieve all symbols- Returns:
- an iterator over all the symbols at the given address
- See Also:
SymbolTable.getSymbols(Address)
-
getSymbols
public Symbol[] getSymbols(Address addr)
Description copied from interface:SymbolTableReturns 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. Note that unless all the symbols are needed at once, you should consider using theSymbolTable.getSymbolsAsIterator(Address)method instead.- Specified by:
getSymbolsin interfaceSymbolTable- Parameters:
addr- the address at which to retrieve all symbols.- Returns:
- a zero-length array when no symbols are defined at address.
- See Also:
SymbolTable.getSymbolsAsIterator(Address)
-
getUserSymbols
public Symbol[] getUserSymbols(Address addr)
Description copied from interface:SymbolTableReturns an array of all user defined symbols at the given address- Specified by:
getUserSymbolsin interfaceSymbolTable- Parameters:
addr- the address at which to retrieve all user defined symbols.- Returns:
- all symbols at specified address
-
getSymbol
public Symbol getSymbol(java.lang.String name, Address address, Namespace namespace)
Description copied from interface:SymbolTableGet 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. This method will not return a default thunk (i.e., thunk function symbol with default source type) since it mirrors the name and parent namespace of the function it thunks.
- Specified by:
getSymbolin interfaceSymbolTable- Parameters:
name- the name of the symbol to retrieveaddress- the address of the symbol to retrievenamespace- the namespace of the symbol to retrieve. May be null which indicates global namespace.- Returns:
- the symbol which matches the specified criteria or null if not found
- See Also:
for a convenience method if the namespace is the global namespace.
-
getGlobalSymbol
public Symbol getGlobalSymbol(java.lang.String name, Address addr)
Description copied from interface:SymbolTableGet 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.NOTE: This method will not return a default thunk (i.e., thunk function symbol with default source type) since it mirrors the name and parent namespace of the function it thunks.
- Specified by:
getGlobalSymbolin interfaceSymbolTable- Parameters:
name- the name of the symbol to retrieveaddr- the address of the symbol to retrieve- Returns:
- the symbol which matches the specified criteria in the global namespace or null if not found
- See Also:
SymbolTable.getSymbol(String, Address, Namespace)
-
getGlobalSymbols
public java.util.List<Symbol> getGlobalSymbols(java.lang.String name)
Description copied from interface:SymbolTableReturns a list of all global symbols with the given name.NOTE: This method will not return default thunks (i.e., thunk function symbol with default source type).
- Specified by:
getGlobalSymbolsin 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:SymbolTableReturns the library symbol with the given name.- Specified by:
getLibrarySymbolin 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:SymbolTableReturns a list of all symbols with the given name in the given namespace.NOTE: The resulting iterator will not return default thunks (i.e., thunk function symbol with default source type).
- Specified by:
getSymbolsin interfaceSymbolTable- Parameters:
name- the name of the symbols to retrieve.namespace- the namespace to search for symbols.- Returns:
- all symbols which satisfy specified criteria
-
getNamespace
public Namespace getNamespace(java.lang.String name, Namespace namespace)
Description copied from interface:SymbolTableReturns 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:
getNamespacein 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:SymbolTableReturns an iterator over all the symbols in the given namespaceNOTE: The resulting iterator will not return default thunks (i.e., thunk function symbol with default source type).
- Specified by:
getSymbolsin interfaceSymbolTable- Parameters:
namespace- the namespace to search for symbols.- Returns:
- symbol iterator
-
getSymbols
public SymbolIterator getSymbols(long namespaceID)
Description copied from interface:SymbolTableReturns an iterator over all the symbols in the given namespaceNOTE: This method will not return a default thunk (i.e., thunk function symbol with default source type).
- Specified by:
getSymbolsin interfaceSymbolTable- Parameters:
namespaceID- the namespace ID to search for symbols.- Returns:
- symbol iterator
-
getSymbols
public SymbolIterator getSymbols(java.lang.String name)
Description copied from interface:SymbolTableReturns all the symbols with the given name.NOTE: The resulting iterator will not return default thunks (i.e., thunk function symbol with default source type).
- Specified by:
getSymbolsin 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:SymbolTableReturns 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:
getPrimarySymbolin 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:SymbolTableReturns the symbol that this reference is associated with.- Specified by:
getSymbolin interfaceSymbolTable- Parameters:
ref- the reference to find the associated symbol for.- Returns:
- referenced symbol
-
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:
- the address
-
getPrimarySymbolIterator
public SymbolIterator getPrimarySymbolIterator(Address startAddr, boolean forward)
Description copied from interface:SymbolTableGet iterator over only primary symbols starting at the specifiedstartAddr- Specified by:
getPrimarySymbolIteratorin interfaceSymbolTable- Parameters:
startAddr- the address at which to begin the iteration.forward- true means the iterator is in the forward direction- Returns:
- symbol iterator
-
getPrimarySymbolIterator
public SymbolIterator getPrimarySymbolIterator(AddressSetView set, boolean forward)
Description copied from interface:SymbolTableGet an iterator over symbols at addresses in the given addressSet- Specified by:
getPrimarySymbolIteratorin interfaceSymbolTable- Parameters:
set- the set of address over which to iterate symbols (required).forward- true means the iterator is in the forward direction- Returns:
- symbol iterator
-
getSymbols
public SymbolIterator getSymbols(AddressSetView set, SymbolType type, boolean forward)
Description copied from interface:SymbolTableReturns all the symbols of the given type within the given address set.- Specified by:
getSymbolsin interfaceSymbolTable- Parameters:
set- the address set in which to look for symbols of the given type (required).type- the SymbolType to look for.forward- the direction within the addressSet to search- Returns:
- symbol iterator
-
getPrimarySymbolIterator
public SymbolIterator getPrimarySymbolIterator(boolean forward)
Description copied from interface:SymbolTableGet iterator over all primary symbols.- Specified by:
getPrimarySymbolIteratorin interfaceSymbolTable- Parameters:
forward- true means the iterator is in the forward direction- Returns:
- symbol iterator
-
getSymbolIterator
public SymbolIterator getSymbolIterator(Address startAddr, boolean forward)
Description copied from interface:SymbolTableGet iterator over all symbols starting at the specifiedstartAddr- Specified by:
getSymbolIteratorin interfaceSymbolTable- Parameters:
startAddr- the address at which to begin the iteration.forward- true means the iterator is in the forward direction- Returns:
- symbol iterator
-
getSymbolIterator
public SymbolIterator getSymbolIterator()
Description copied from interface:SymbolTableGet iterator over all label symbols. Labels are defined on memory locations.- Specified by:
getSymbolIteratorin interfaceSymbolTable- Returns:
- symbol iterator
-
getAllSymbols
public SymbolIterator getAllSymbols(boolean includeDynamicSymbols)
Description copied from interface:SymbolTableReturns an iterator over all symbols, including Dynamic symbols if includeDynamicSymbols is true.- Specified by:
getAllSymbolsin interfaceSymbolTable- Parameters:
includeDynamicSymbols- if true, the iterator will include dynamicSymbols- Returns:
- symbol iterator
-
getSymbolIterator
public SymbolIterator getSymbolIterator(boolean forward)
Description copied from interface:SymbolTableReturns an iterator over all symbols.- Specified by:
getSymbolIteratorin interfaceSymbolTable- Parameters:
forward- true means the iterator is in the forward direction- Returns:
- symbol iterator
-
getSymbolIterator
public SymbolIterator getSymbolIterator(java.lang.String searchStr, boolean caseSensitive)
Description copied from interface:SymbolTableReturns a an iterator over all symbols that match the given search string.NOTE: The iterator is in the forward direction only and will not return default thunk functions. The resulting iterator will not return default thunks (i.e., thunk function symbol with default source type).
- Specified by:
getSymbolIteratorin 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.- Returns:
- symbol iterator
-
addExternalEntryPoint
public void addExternalEntryPoint(Address addr)
Description copied from interface:SymbolTableSets the given address to be an external entry point.- Specified by:
addExternalEntryPointin interfaceSymbolTable- Parameters:
addr- the address to set as an external entry point.
-
getExternalEntryPointIterator
public AddressIterator getExternalEntryPointIterator()
Description copied from interface:SymbolTableGet forward/back iterator over addresses that are entry points.- Specified by:
getExternalEntryPointIteratorin interfaceSymbolTable- Returns:
- entry-point address iterator
-
isExternalEntryPoint
public boolean isExternalEntryPoint(Address addr)
Description copied from interface:SymbolTableReturns true if the given address has been set as an external entry point.- Specified by:
isExternalEntryPointin interfaceSymbolTable- Parameters:
addr- address to test for external entry point.- Returns:
- true if specified address has been marked as an entry point, else false
-
removeExternalEntryPoint
public void removeExternalEntryPoint(Address addr)
Description copied from interface:SymbolTableRemoves the given address as an external entry point.- Specified by:
removeExternalEntryPointin interfaceSymbolTable- Parameters:
addr- the address to remove as an external entry point.
-
hasLabelHistory
public boolean hasLabelHistory(Address addr)
Description copied from interface:SymbolTableReturn true if there is a history of label changes at the given address.- Specified by:
hasLabelHistoryin interfaceSymbolTable- Parameters:
addr- the address to check for symbol history.- Returns:
- true if label history exists for specified address, else false
-
getLabelHistory
public java.util.Iterator<LabelHistory> getLabelHistory()
Description copied from interface:SymbolTableGet an iterator over all the label history objects.- Specified by:
getLabelHistoryin interfaceSymbolTable- Returns:
- label history iterator
-
getLabelHistory
public LabelHistory[] getLabelHistory(Address addr)
Description copied from interface:SymbolTableGet the label history objects for the given address. The history object records changes made to labels at some address.- Specified by:
getLabelHistoryin interfaceSymbolTable- Parameters:
addr- address of the label change- Returns:
- array of history objects
-
invalidateCache
public void invalidateCache(boolean all)
Description copied from interface:ManagerDBClears all data caches.- Specified by:
invalidateCachein 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:
oldAddr- the old symbol addressnewAddr- the new symbol address
-
getDynamicSymbolID
public long getDynamicSymbolID(Address addr)
Description copied from interface:SymbolTableGet the unique symbol ID for a dynamic symbol associated with the specified addr. The generation of this symbol ID does not reflect the presence of a dynamic symbol at the specified addr. This symbol ID should not be permanently stored since the encoding may change between software releases.- Specified by:
getDynamicSymbolIDin 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:SymbolTableReturns the lowest level Namespace within which the specified address is contained.- Specified by:
getNamespacein interfaceSymbolTable- Parameters:
addr- the address for which to finds its enclosing namespace.- Returns:
- namespace which contains specified address
-
getClassNamespaces
public java.util.Iterator<GhidraClass> getClassNamespaces()
Description copied from interface:SymbolTableReturns all Class Namespaces defined within the program in an arbitrary ordering.- Specified by:
getClassNamespacesin interfaceSymbolTable- Returns:
- iterator of
GhidraClass
-
getDefinedSymbols
public SymbolIterator getDefinedSymbols()
Description copied from interface:SymbolTableReturns an iterator over all defined symbols in no particular order.- Specified by:
getDefinedSymbolsin interfaceSymbolTable- Returns:
- symbol iterator
-
getExternalSymbol
public Symbol getExternalSymbol(java.lang.String name)
Description copied from interface:SymbolTableReturns the external symbol with the given name.- Specified by:
getExternalSymbolin 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:SymbolTableReturns all the external symbols with the given name.- Specified by:
getExternalSymbolsin 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:SymbolTableReturns an iterator over all defined external symbols in no particular order.- Specified by:
getExternalSymbolsin interfaceSymbolTable- Returns:
- symbol iterator
-
getChildren
public SymbolIterator getChildren(Symbol parentSymbol)
Description copied from interface:SymbolTableReturns an iterator over all symbols that have the given symbol as its parent.NOTE: The resulting iterator will not return default thunks (i.e., thunk function symbol with default source type).
- Specified by:
getChildrenin interfaceSymbolTable- Parameters:
parentSymbol- the parent symbol- Returns:
- symbol iterator
-
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:ManagerDBMove all objects within an address range to a new location.- Specified by:
moveAddressRangein 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:ManagerDBDelete all objects which have been applied to the address range startAddr to endAddr and update the database accordingly.- Specified by:
deleteAddressRangein 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:SymbolTableCreate a class namespace in the given parent namespace.- Specified by:
createClassin 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 label 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:SymbolTableCreates a Library namespace with the given name.- Specified by:
createExternalLibraryin 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 label symbol exists with the given nameInvalidInputException- if the name is invalid.
-
createNameSpace
public Namespace createNameSpace(Namespace parent, java.lang.String name, SourceType source) throws DuplicateNameException, InvalidInputException
Description copied from interface:SymbolTableCreates a new namespace.- Specified by:
createNameSpacein 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 label symbol exists with the given nameInvalidInputException- if the name is invalid.
-
convertNamespaceToClass
public GhidraClass convertNamespaceToClass(Namespace namespace)
Description copied from interface:SymbolTableConverts the given namespace to a class namespace- Specified by:
convertNamespaceToClassin interfaceSymbolTable- Parameters:
namespace- the namespace to convert- Returns:
- the new class
-
getOrCreateNameSpace
public Namespace getOrCreateNameSpace(Namespace parent, java.lang.String name, SourceType source) throws DuplicateNameException, InvalidInputException
Description copied from interface:SymbolTableGets an existing namespace with the given name in the given parent. If no namespace exists, then one will be created.- Specified by:
getOrCreateNameSpacein interfaceSymbolTable- Parameters:
parent- the parent namespacename- the namespace namesource- the source type for the namespace if one is created- Returns:
- the namespace
- Throws:
DuplicateNameException- thrown if another non function or label symbol exists with the given nameInvalidInputException- if the name is invalid
-
createLibrarySymbol
public SymbolDB createLibrarySymbol(java.lang.String name, java.lang.String pathname, SourceType source) throws DuplicateNameException, InvalidInputException
Create a Library symbol with the specified name and optional pathname- Parameters:
name- library namepathname- project file path (may be null)source- symbol source- Returns:
- library symbol
- Throws:
DuplicateNameException- if library name conflicts with another symbolInvalidInputException
-
createLabel
public Symbol createLabel(Address addr, java.lang.String name, SourceType source) throws InvalidInputException
Description copied from interface:SymbolTableCreate 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:
createLabelin 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.- Returns:
- new code or function symbol
- Throws:
InvalidInputException- thrown if names contains white space, is zero length, or is null for non-default source.
-
createLabel
public Symbol createLabel(Address addr, java.lang.String name, Namespace namespace, SourceType source) throws InvalidInputException
Description copied from interface:SymbolTableCreate 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:
createLabelin 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.- Returns:
- new code or function symbol
- Throws:
InvalidInputException- thrown if names contains white space, is zero length, or is null for non-default source. Also thrown if invalid parentNamespace is specified.
-
createCodeSymbol
public Symbol createCodeSymbol(Address addr, java.lang.String name, Namespace namespace, SourceType source, java.lang.String stringData) throws InvalidInputException
Internal method for creating label symbols. If identical memory symbol already exists it will be returned.- Parameters:
addr- the address for the new symbol (memory or external)name- the name of the new symbolnamespace- the namespace for the new symbolsource- the SourceType of the new symbolstringData- 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 stringData) throws InvalidInputException
Internal method for creating function 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 symbolstringData- 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:SymbolTableReturns the class symbol with the given name in the given namespace.- Specified by:
getClassSymbolin 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:SymbolTableReturns the parameter symbol with the given name in the given namespace.- Specified by:
getParameterSymbolin 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:SymbolTableReturns the local variable symbol with the given name in the given namespace.- Specified by:
getLocalVariableSymbolin 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:SymbolTableReturns a generic namespace symbol with the given name in the given namespace.- Specified by:
getNamespaceSymbolin 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:SymbolTableReturns all the label or function symbols that have the given name in the given namespace.NOTE: This method will not return a default thunk (i.e., thunk function symbol with default source type) since it mirrors the name and parent namespace of the function it thunks.
- Specified by:
getLabelOrFunctionSymbolsin 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:SymbolTableReturns 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:
getVariableSymbolin interfaceSymbolTable- Parameters:
name- the name of the variable.function- the function to search.- Returns:
- a parameter or local variable symbol with the given name.
-
-