Package ghidra.program.database.reloc
Class RelocationManager
- java.lang.Object
-
- ghidra.program.database.reloc.RelocationManager
-
- All Implemented Interfaces:
ManagerDB,RelocationTable
public class RelocationManager extends java.lang.Object implements RelocationTable, ManagerDB
An implementation of the relocation table interface.
-
-
Field Summary
-
Fields inherited from interface ghidra.program.model.reloc.RelocationTable
RELOCATABLE_PROP_NAME
-
-
Constructor Summary
Constructors Constructor Description RelocationManager(DBHandle handle, AddressMap addrMap, int openMode, Lock lock, TaskMonitor monitor)Constructs a new relocation manager.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Relocationadd(Address addr, int type, long[] values, byte[] bytes, java.lang.String symbolName)Creates and adds a new relocation with the specified address, type, and value.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.RelocationgetRelocation(Address addr)Returns the relocation with the specified address.RelocationgetRelocationAfter(Address addr)Returns the next relocation point which follows the specified address.java.util.Iterator<Relocation>getRelocations()Returns an iterator over all relocation points (in ascending address order) located within the program.java.util.Iterator<Relocation>getRelocations(AddressSetView set)Returns an iterator over all the relocation points (in ascending address order) located within the specified address set.intgetSize()Returns the number of relocation in this table.voidinvalidateCache(boolean all)Clears all data caches.booleanisRelocatable()Returns true if this relocation table contains relocations for a relocatable binary.voidmoveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)Move all objects within an address range to a new location.voidprogramReady(int openMode, int currentRevision, TaskMonitor monitor)Callback from program made to each manager after the program has completed initialization.voidremove(Relocation reloc)Removes the relocation object.voidsetProgram(ProgramDB p)Callback from program used to indicate all manager have been created.
-
-
-
Constructor Detail
-
RelocationManager
public RelocationManager(DBHandle handle, AddressMap addrMap, int openMode, Lock lock, TaskMonitor monitor) throws VersionException, java.io.IOException
Constructs a new relocation manager.- Parameters:
handle- the database handleaddrMap- the address mapopenMode- the open mode; CREATE, UPDATE, READONLY, UPGRADElock- the program synchronization lockmonitor- the task monitor- Throws:
VersionExceptionjava.io.IOException
-
-
Method Detail
-
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.
-
setProgram
public void setProgram(ProgramDB p)
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:
p- 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.
-
add
public Relocation add(Address addr, int type, long[] values, byte[] bytes, java.lang.String symbolName)
Description copied from interface:RelocationTableCreates and adds a new relocation with the specified address, type, and value.- Specified by:
addin interfaceRelocationTable- Parameters:
addr- the address where the relocation is requiredtype- the type of relocation to performvalues- the values needed when performing the relocationbytes- original instruction bytes affected by relocationsymbolName- the name of the symbol being relocated; may be null- Returns:
- the newly added relocation object
-
remove
public void remove(Relocation reloc)
Description copied from interface:RelocationTableRemoves the relocation object.- Specified by:
removein interfaceRelocationTable- Parameters:
reloc- the relocation object to remove
-
getRelocation
public Relocation getRelocation(Address addr)
Description copied from interface:RelocationTableReturns the relocation with the specified address.- Specified by:
getRelocationin interfaceRelocationTable- Parameters:
addr- the address where the relocation is defined- Returns:
- the relocation with the specified address
-
getRelocations
public java.util.Iterator<Relocation> getRelocations()
Description copied from interface:RelocationTableReturns an iterator over all relocation points (in ascending address order) located within the program.- Specified by:
getRelocationsin interfaceRelocationTable- Returns:
- relocation iterator
-
getRelocationAfter
public Relocation getRelocationAfter(Address addr)
Description copied from interface:RelocationTableReturns the next relocation point which follows the specified address.- Specified by:
getRelocationAfterin interfaceRelocationTable- Parameters:
addr- starting point- Returns:
- next relocation after addr
-
getRelocations
public java.util.Iterator<Relocation> getRelocations(AddressSetView set)
Description copied from interface:RelocationTableReturns an iterator over all the relocation points (in ascending address order) located within the specified address set.- Specified by:
getRelocationsin interfaceRelocationTable- Parameters:
set- address set- Returns:
- relocation iterator
-
getSize
public int getSize()
Description copied from interface:RelocationTableReturns the number of relocation in this table.- Specified by:
getSizein interfaceRelocationTable- Returns:
- the number of relocation in this table
-
isRelocatable
public boolean isRelocatable()
Description copied from interface:RelocationTableReturns 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:
isRelocatablein interfaceRelocationTable- 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: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.
-
moveAddressRange
public void moveAddressRange(Address fromAddr, Address toAddr, long length, TaskMonitor monitor)
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.
-
-