Class FunctionManagerDB

java.lang.Object
ghidra.program.database.function.FunctionManagerDB
All Implemented Interfaces:
ManagerDB, FunctionManager

public class FunctionManagerDB extends Object implements FunctionManager
Class that manages all functions within the program; there are some convenience methods on Listing to create and access functions, but all function related calls are routed to this class.
  • Constructor Details

    • FunctionManagerDB

      public FunctionManagerDB(DBHandle dbHandle, AddressMap addrMap, OpenMode openMode, Lock lock, TaskMonitor monitor) throws VersionException, CancelledException, IOException
      Construct a new FunctionManager
      Parameters:
      dbHandle - data base handle
      addrMap - address map for the program
      openMode - CREATE, UPDATE, READ_ONLY, or UPGRADE
      lock - the program synchronization lock
      monitor -
      Throws:
      VersionException - if function manager's version does not match its expected version
      CancelledException - if the function table is being upgraded and the user canceled the upgrade process
      IOException - if there was a problem accessing the database
  • Method Details

    • getProgram

      public ProgramDB getProgram()
      Description copied from interface: FunctionManager
      Returns this manager's program
      Specified by:
      getProgram in interface FunctionManager
      Returns:
      the program
    • getCallingConventionNames

      public Collection<String> getCallingConventionNames()
      Description copied from interface: FunctionManager
      Get the ordered list of defined calling convention names. The reserved names "unknown" and "default" are not included. The returned collection may not include all names referenced by various functions and function-definitions. This set is limited to those defined by the associated compiler specification. See DataTypeManager.getDefinedCallingConventionNames().

      For a set of all known names (including those that are not defined by compiler spec) see DataTypeManager.getKnownCallingConventionNames().

      Specified by:
      getCallingConventionNames in interface FunctionManager
      Returns:
      the calling convention names.
    • getDefaultCallingConvention

      public PrototypeModel getDefaultCallingConvention()
      Description copied from interface: FunctionManager
      Gets the default calling convention's prototype model in this program.
      Specified by:
      getDefaultCallingConvention in interface FunctionManager
      Returns:
      the default calling convention prototype model or null.
    • getCallingConvention

      public PrototypeModel getCallingConvention(String name)
      Description copied from interface: FunctionManager
      Gets the prototype model of the calling convention with the specified name in this program
      Specified by:
      getCallingConvention in interface FunctionManager
      Parameters:
      name - the calling convention name
      Returns:
      the named function calling convention prototype model or null.
    • createExternalFunction

      public Function createExternalFunction(Address extSpaceAddr, String name, Namespace nameSpace, String extData, SourceType source) throws InvalidInputException
      Transform an existing external symbol into an external function. This method should only be invoked by an ExternalSymbol
      Parameters:
      extSpaceAddr - the external space address to use when creating this external. Any other symbol using this address must first be deleted. Results are unpredictable if this is not done.
      name - the external function name
      nameSpace - the external function namespace
      extData - the external data string to store additional info (see ExternalLocationDB)
      source - the source of this external.
      Returns:
      external function
      Throws:
      InvalidInputException - if the name is invalid
    • createFunction

      public Function createFunction(String name, Address entryPoint, AddressSetView body, SourceType source) throws InvalidInputException, OverlappingFunctionException
      Description copied from interface: FunctionManager
      Create a function with the given body at entry point within the global namespace.
      Specified by:
      createFunction in interface FunctionManager
      Parameters:
      name - the name of the new function or null for default name
      entryPoint - entry point of function
      body - addresses contained in the function body
      source - the source of this function
      Returns:
      new function or null if one or more functions overlap the specified body address set.
      Throws:
      InvalidInputException - if the name has invalid characters
      OverlappingFunctionException - if the address set of the body overlaps an existing function
    • createFunction

      public Function createFunction(String name, Namespace nameSpace, Address entryPoint, AddressSetView body, SourceType source) throws InvalidInputException, OverlappingFunctionException
      Description copied from interface: FunctionManager
      Create a function with the given body at entry point.
      Specified by:
      createFunction in interface FunctionManager
      Parameters:
      name - the name of the new function or null for default name
      nameSpace - the nameSpace in which to create the function
      entryPoint - entry point of function
      body - addresses contained in the function body
      source - the source of this function
      Returns:
      new function or null if one or more functions overlap the specified body address set.
      Throws:
      InvalidInputException - if the name has invalid characters
      OverlappingFunctionException - if the address set of the body overlaps an existing function
    • createThunkFunction

      public Function createThunkFunction(String name, Namespace nameSpace, Address entryPoint, AddressSetView body, Function thunkedFunction, SourceType source) throws OverlappingFunctionException
      Description copied from interface: FunctionManager
      Create a thunk function with the given body at entry point.
      Specified by:
      createThunkFunction in interface FunctionManager
      Parameters:
      name - the name of the new function or null for default name
      nameSpace - the nameSpace in which to create the function
      entryPoint - entry point of function
      body - addresses contained in the function body
      thunkedFunction - referenced function (required is creating a thunk function)
      source - the source of this function
      Returns:
      new function or null if one or more functions overlap the specified body address set.
      Throws:
      OverlappingFunctionException - if the address set of the body overlaps an existing function
    • getFunctionCount

      public int getFunctionCount()
      Description copied from interface: FunctionManager
      Returns the total number of functions in the program including external functions
      Specified by:
      getFunctionCount in interface FunctionManager
      Returns:
      the count
    • removeFunction

      public boolean removeFunction(Address entryPoint)
      Description copied from interface: FunctionManager
      Remove a function defined at entryPoint
      Specified by:
      removeFunction in interface FunctionManager
      Parameters:
      entryPoint - the entry point
      Returns:
      true if the function was removed
    • functionTagsChanged

      public void functionTagsChanged()
    • functionNamespaceChanged

      public void functionNamespaceChanged(long key)
    • doRemoveFunction

      public boolean doRemoveFunction(long key)
    • getFunction

      public Function getFunction(long key)
      Get the function with the given key.
      Specified by:
      getFunction in interface FunctionManager
      Parameters:
      key - ID of the function; ID is obtained by calling Function.getID()
      Returns:
      null if there is no function with the given key
    • getReferencedFunction

      public Function getReferencedFunction(Address address)
      Description copied from interface: FunctionManager
      Get the function which resides at the specified address or is referenced from the specified address
      Specified by:
      getReferencedFunction in interface FunctionManager
      Parameters:
      address - function address or address of pointer to a function.
      Returns:
      referenced function or null
    • getFunctionAt

      public Function getFunctionAt(Address entryPoint)
      Description copied from interface: FunctionManager
      Get the function at entryPoint
      Specified by:
      getFunctionAt in interface FunctionManager
      Parameters:
      entryPoint - the entry point
      Returns:
      null if there is no function at entryPoint
    • getFunctionContaining

      public Function getFunctionContaining(Address addr)
      Description copied from interface: FunctionManager
      Get a function containing an address.
      Specified by:
      getFunctionContaining in interface FunctionManager
      Parameters:
      addr - address within the function
      Returns:
      function containing this address, null otherwise
    • getFunctions

      public FunctionIterator getFunctions(boolean forward)
      Description copied from interface: FunctionManager
      Returns an iterator over all non-external functions in address (entry point) order
      Specified by:
      getFunctions in interface FunctionManager
      Parameters:
      forward - true means to iterate in ascending address order
      Returns:
      the iterator
    • getFunctions

      public FunctionIterator getFunctions(Address start, boolean forward)
      Description copied from interface: FunctionManager
      Get an iterator over non-external functions starting at an address and ordered by entry address
      Specified by:
      getFunctions in interface FunctionManager
      Parameters:
      start - starting address
      forward - true means to iterate in ascending address order
      Returns:
      an iterator over functions.
    • getFunctions

      public FunctionIterator getFunctions(AddressSetView asv, boolean forward)
      Description copied from interface: FunctionManager
      Get an iterator over functions with entry points in the specified address set. Function are ordered based upon entry address.
      Specified by:
      getFunctions in interface FunctionManager
      Parameters:
      asv - address set to iterate over
      forward - true means to iterate in ascending address order
      Returns:
      an iterator over functions.
    • getFunctionsNoStubs

      public FunctionIterator getFunctionsNoStubs(boolean forward)
      Description copied from interface: FunctionManager
      Returns an iterator over all REAL functions in address (entry point) order (real functions have instructions, and aren't stubs)
      Specified by:
      getFunctionsNoStubs in interface FunctionManager
      Parameters:
      forward - true means to iterate in ascending address order
      Returns:
      the iterator
    • getFunctionsNoStubs

      public FunctionIterator getFunctionsNoStubs(Address start, boolean forward)
      Description copied from interface: FunctionManager
      Get an iterator over REAL functions starting at an address and ordered by entry address (real functions have instructions, and aren't stubs).
      Specified by:
      getFunctionsNoStubs in interface FunctionManager
      Parameters:
      start - starting address
      forward - true means to iterate in ascending address order
      Returns:
      an iterator over functions.
    • getFunctionsNoStubs

      public FunctionIterator getFunctionsNoStubs(AddressSetView asv, boolean forward)
      Description copied from interface: FunctionManager
      Get an iterator over REAL functions with entry points in the specified address set (real functions have instructions, and aren't stubs). Functions are ordered based upon entry address.
      Specified by:
      getFunctionsNoStubs in interface FunctionManager
      Parameters:
      asv - address set to iterate over
      forward - true means to iterate in ascending address order
      Returns:
      an iterator over functions.
    • getExternalFunctions

      public FunctionIterator getExternalFunctions()
      Description copied from interface: FunctionManager
      Get an iterator over all external functions. Functions returned have no particular order.
      Specified by:
      getExternalFunctions in interface FunctionManager
      Returns:
      an iterator over external functions
    • isInFunction

      public boolean isInFunction(Address addr)
      Description copied from interface: FunctionManager
      Check if this address contains a function.
      Specified by:
      isInFunction in interface FunctionManager
      Parameters:
      addr - address to check
      Returns:
      true if this address is contained in a function.
    • moveAddressRange

      public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor) throws CancelledException
      Description copied from interface: FunctionManager
      Move all objects within an address range to a new location
      Specified by:
      moveAddressRange in interface FunctionManager
      Specified by:
      moveAddressRange in interface ManagerDB
      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. The specified start and end addresses must form a valid range within a single AddressSpace.
      Specified by:
      deleteAddressRange in interface ManagerDB
      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.
    • 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 interface ManagerDB
      Parameters:
      program - the program is set when all the initializations have been completed.
    • programReady

      public void programReady(OpenMode openMode, int currentRevision, TaskMonitor monitor) throws 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 interface ManagerDB
      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:
      IOException - if a database io error occurs.
      CancelledException - if the user cancelled the operation via the task monitor.
    • initSignatureSource

      public void initSignatureSource(TaskMonitor monitor) throws CancelledException, IOException
      Initialize function signature source when it was first introduced and attempt to disable custom storage if possible. NOTE: This method intended to be called by ProgramDB only during appropriate upgrade.
      Parameters:
      monitor -
      Throws:
      CancelledException
      IOException
    • removeExplicitThisParameters

      public void removeExplicitThisParameters(TaskMonitor monitor) throws CancelledException, IOException
      Remove parameter symbols which correspond to the 'this' parameter for all __thiscall functions using dynamic storage. NOTE: This method intended to be called by ProgramDB only during appropriate upgrade.
      Parameters:
      monitor -
      Throws:
      CancelledException
      IOException
    • invalidateCache

      public void invalidateCache(boolean all)
      Description copied from interface: FunctionManager
      Clears all data caches
      Specified by:
      invalidateCache in interface FunctionManager
      Specified by:
      invalidateCache in interface ManagerDB
      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.
    • getFunctionsOverlapping

      public Iterator<Function> getFunctionsOverlapping(AddressSetView set)
      Description copied from interface: FunctionManager
      Return an iterator over functions that overlap the given address set.
      Specified by:
      getFunctionsOverlapping in interface FunctionManager
      Parameters:
      set - address set of interest
      Returns:
      iterator over Functions
    • getReferencedVariable

      public Variable getReferencedVariable(Address instrAddr, Address storageAddr, int size, boolean isRead)
      Description copied from interface: FunctionManager
      Attempts to determine which if any of the local functions variables are referenced by the specified reference. In utilizing the firstUseOffset scoping model, negative offsets (relative to the functions entry) are shifted beyond the maximum positive offset within the function. While this does not account for the actual instruction flow, it is hopefully accurate enough for most situations.
      Specified by:
      getReferencedVariable in interface FunctionManager
      Parameters:
      instrAddr - the instruction address
      storageAddr - the storage address
      size - varnode size in bytes (1 is assumed if value <= 0)
      isRead - true if the reference is a read reference
      Returns:
      referenced variable or null if one not found
    • replaceDataTypes

      public void replaceDataTypes(Map<Long,Long> dataTypeReplacementMap)
    • isThunk

      public boolean isThunk(long key)
    • getThunkedFunctionId

      public long getThunkedFunctionId(long functionId)
    • getThunkFunctionIds

      public List<Long> getThunkFunctionIds(long referencedFunctionId)
      Returns list of thunk function keys which reference the specified referencedFunctionKey
      Parameters:
      referencedFunctionId -
      Returns:
      list of thunk function IDs or null
    • setLanguage

      public void setLanguage(LanguageTranslator translator, TaskMonitor monitor) throws CancelledException
      Perform language translation. Update function return storage specifications to reflect address space and register mappings
      Parameters:
      translator -
      monitor -
      Throws:
      CancelledException
    • getFunctionTagManager

      public FunctionTagManager getFunctionTagManager()
      Description copied from interface: FunctionManager
      Returns the function tag manager
      Specified by:
      getFunctionTagManager in interface FunctionManager
      Returns:
      the function tag manager