Class RelocationManager

java.lang.Object
ghidra.program.database.reloc.RelocationManager
All Implemented Interfaces:
ManagerDB, RelocationTable

public class RelocationManager extends Object implements RelocationTable, ManagerDB
An implementation of the relocation table interface.
  • Constructor Details

  • Method Details

    • invalidateCache

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

      public void setProgram(ProgramDB p)
      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:
      p - 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.
    • add

      public Relocation add(Address addr, Relocation.Status status, int type, long[] values, byte[] bytes, String symbolName)
      Description copied from interface: RelocationTable
      Adds a new relocation entry when the original bytes being replaced are to be specified.
      Specified by:
      add in interface RelocationTable
      Parameters:
      addr - the memory address where the relocation is required
      status - relocation status (use Relocation.Status.UNKNOWN if not known).
      type - the type of relocation to perform
      values - relocation-specific values which may be useful in diagnosing relocation; may be null.
      bytes - original memory bytes affected by relocation. A null value may be passed but this case is deprecated (see RelocationTable.add(Address, Status, int, long[], int, String). If null is specified and Relocation.Status.hasBytes() is true a default number of original bytes will be assumed and obtained from the underlying memory FileBytes if possible.
      symbolName - the name of the symbol being relocated; may be null
      Returns:
      the newly added relocation object
    • add

      public Relocation add(Address addr, Relocation.Status status, int type, long[] values, int byteLength, String symbolName)
      Description copied from interface: RelocationTable
      Adds a new relocation entry when the original bytes being replaced should be determined from the underlying FileBytes.
      Specified by:
      add in interface RelocationTable
      Parameters:
      addr - the memory address where the relocation is required
      status - relocation status (use Relocation.Status.UNKNOWN if not known).
      type - the type of relocation to perform
      values - relocation-specific values which may be useful in diagnosing relocation; may be null.
      byteLength - the number of bytes affected by this relocation. This value is only used with a status of Relocation.Status.UNKNOWN, Relocation.Status.APPLIED or Relocation.Status.APPLIED_OTHER. Valid range is 1..8 bytes.
      symbolName - the name of the symbol being relocated; may be null
      Returns:
      the newly added relocation object
    • hasRelocation

      public boolean hasRelocation(Address addr)
      Description copied from interface: RelocationTable
      Determine if the specified address has a relocation defined.
      Specified by:
      hasRelocation in interface RelocationTable
      Parameters:
      addr - memory address within program
      Returns:
      true if relocation defined, otherwise false
    • getRelocations

      public List<Relocation> getRelocations(Address addr)
      Description copied from interface: RelocationTable
      Returns the ordered list of relocations which have been defined for the specified address. In most cases there will be one or none, but in some cases multiple relocations may be applied to a single address.
      Specified by:
      getRelocations in interface RelocationTable
      Parameters:
      addr - the address where the relocation(s) are defined
      Returns:
      the ordered list of relocations which have been defined for the specified address.
    • getRelocations

      public Iterator<Relocation> getRelocations()
      Description copied from interface: RelocationTable
      Returns an iterator over all defined relocations (in ascending address order) located within the program.
      Specified by:
      getRelocations in interface RelocationTable
      Returns:
      ordered relocation iterator
    • getRelocationAddressAfter

      public Address getRelocationAddressAfter(Address addr)
      Description copied from interface: RelocationTable
      Returns the next relocation address which follows the specified address.
      Specified by:
      getRelocationAddressAfter in interface RelocationTable
      Parameters:
      addr - starting point
      Returns:
      next relocation address after addr or null if none
    • getRelocations

      public Iterator<Relocation> getRelocations(AddressSetView set)
      Description copied from interface: RelocationTable
      Returns an iterator over all defined relocations (in ascending address order) located within the program over the specified address set.
      Specified by:
      getRelocations in interface RelocationTable
      Parameters:
      set - address set
      Returns:
      ordered relocation iterator
    • getSize

      public int getSize()
      Description copied from interface: RelocationTable
      Returns the number of relocation in this table.
      Specified by:
      getSize in interface RelocationTable
      Returns:
      the number of relocation in this table
    • isRelocatable

      public boolean isRelocatable()
      Description copied from interface: RelocationTable
      Returns true if this relocation table contains relocations for a relocatable binary. Some binaries may contain relocations, but not actually be relocatable. For example, ELF executables.
      Specified by:
      isRelocatable in interface RelocationTable
      Returns:
      true if this relocation table contains relocations for a relocatable binary
    • deleteAddressRange

      public void deleteAddressRange(Address startAddr, Address endAddr, TaskMonitor monitor)
      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.
    • moveAddressRange

      public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)
      Description copied from interface: ManagerDB
      Move all objects within an address range to a new location.
      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.