Package ghidra.program.database.register
Class OldProgramContextDB
java.lang.Object
ghidra.program.database.register.OldProgramContextDB
- All Implemented Interfaces:
ManagerDB
,DefaultProgramContext
,ProgramContext
public class OldProgramContextDB
extends Object
implements ProgramContext, DefaultProgramContext, ManagerDB
ProgramContextDB
defines a processor context over an address
space using database range maps for storage.-
Field Summary
-
Constructor Summary
ConstructorDescriptionOldProgramContextDB
(DBHandle dbHandle, ErrorHandler errHandler, Language language, AddressMap addrMap, Lock lock) Constructs a new ProgramContextDB object -
Method Summary
Modifier and TypeMethodDescriptionvoid
deleteAddressRange
(Address start, Address end, TaskMonitor monitor) Delete all objects which have been applied to the address range startAddr to endAddr and update the database accordingly.long
Returns the base context register.Gets the registers for this context that are used for processor context states.getDefaultRegisterValueAddressRanges
(Register register) Returns an AddressRangeIterator over all addresses that have an associated default value for the given register.getDefaultRegisterValueAddressRanges
(Register register, Address start, Address end) Returns an AddressRangeIterator over all addresses that have an associated default value within the given range for the given register.getDefaultValue
(Register register, Address address) Returns the default value of a register at a given address.getDisassemblyContext
(Address address) Get the disassembly context for a specified address.getFlowValue
(RegisterValue value) Modify register value to eliminate non-flowing bitsgetNonDefaultValue
(Register register, Address address) Returns the (non-default)value assigned to a register at a given address.getNonFlowValue
(RegisterValue value) Modify register value to only include non-flowing bitsgetRegister
(String name) Get a Register object given the name of a registerGet an alphabetical sorted unmodifiable list of original register names (including context registers).Get all the register descriptions defined for this program context.Register[]
Returns an array of all registers that at least one value associated with an address.getRegisterValue
(Register register, Address address) Returns a register value and mask for the given register.getRegisterValueAddressRanges
(Register register) Returns an AddressRangeIterator over all addresses that have an associated value for the given register.getRegisterValueAddressRanges
(Register register, Address start, Address end) Returns an AddressRangeIterator over all addresses that have an associated value within the given range for the given register.getRegisterValueRangeContaining
(Register register, Address addr) Returns the bounding address-range containing addr and the the same RegisterValue throughout.ghidra.program.database.register.RegisterValueRange[]
getRegisterValues
(Register reg, Address start, Address end) long
Returns the value assigned to a register at a given address.boolean
boolean
hasValueOverRange
(Register reg, BigInteger value, AddressSetView addrSet) Returns true if the given register has the value over the addressSetvoid
invalidateCache
(boolean all) Clears all data caches.void
moveAddressRange
(Address fromAddr, Address toAddr, long length, TaskMonitor monitor) Move all objects within an address range to a new location.void
programReady
(OpenMode openMode, int currentRevision, TaskMonitor monitor) Callback from program made to each manager after the program has completed initialization.void
Remove (unset) the register values for a given address range.void
void
setDefaultDisassemblyContext
(RegisterValue newContext) Set the initial disassembly context to be used when initiating disassmblyvoid
setDefaultValue
(RegisterValue registerValue, Address start, Address end) Associates a default value with the given register over the given range.void
setProgram
(ProgramDB program) Callback from program used to indicate all manager have been created.void
setRegisterValue
(Address start, Address end, RegisterValue value) Sets the register context over the given range to the given value.void
setValue
(Register register, Address start, Address end, BigInteger value) Associates a value with a register over a given address range.
-
Field Details
-
defaultRegisterValueMap
-
-
Constructor Details
-
OldProgramContextDB
public OldProgramContextDB(DBHandle dbHandle, ErrorHandler errHandler, Language language, AddressMap addrMap, Lock lock) Constructs a new ProgramContextDB object- Parameters:
dbHandle
- the handle to the database.errHandler
- the error handlerlanguage
- the processor languageaddrMap
- the address map.lock
- the program synchronization lock
-
-
Method Details
-
deleteAddressRange
public void deleteAddressRange(Address start, Address end, 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 singleAddressSpace
.- Specified by:
deleteAddressRange
in interfaceManagerDB
- Parameters:
start
- the first address in the range.end
- 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.
-
get
-
getBaseContextRegister
Description copied from interface:ProgramContext
Returns the base context register.- Specified by:
getBaseContextRegister
in interfaceProgramContext
- Returns:
- the base context register.
-
getDefaultRegisterValueAddressRanges
Description copied from interface:ProgramContext
Returns an AddressRangeIterator over all addresses that have an associated default value for the given register. Each range returned will have the same default value associated with the register for all addresses in that range.- Specified by:
getDefaultRegisterValueAddressRanges
in interfaceProgramContext
- Parameters:
register
- the register for which to get set default value ranges.- Returns:
- An AddressRangeIterator over all address that have default values for the given register.
-
getDefaultRegisterValueAddressRanges
public AddressRangeIterator getDefaultRegisterValueAddressRanges(Register register, Address start, Address end) Description copied from interface:ProgramContext
Returns an AddressRangeIterator over all addresses that have an associated default value within the given range for the given register. Each range returned will have the same default value associated with the register for all addresses in that range.- Specified by:
getDefaultRegisterValueAddressRanges
in interfaceProgramContext
- Parameters:
register
- the register for which to get default value ranges.start
- start of address range to searchend
- end of address range to search- Returns:
- An AddressRangeIterator over all address within the given range that have default values for the given register.
-
getDefaultValue
Description copied from interface:ProgramContext
Returns the default value of a register at a given address.- Specified by:
getDefaultValue
in interfaceDefaultProgramContext
- Specified by:
getDefaultValue
in interfaceProgramContext
- Parameters:
register
- the register for which to get a default value.address
- the address at which to get a default value.- Returns:
- the default value of the register at the given address or null if no default value has been assigned.
-
getNonDefaultValue
Description copied from interface:ProgramContext
Returns the (non-default)value assigned to a register at a given address.- Specified by:
getNonDefaultValue
in interfaceProgramContext
- Parameters:
register
- the register for which to get its value.address
- the address at which to get a value.- Returns:
- a RegisterValue object containing the value of the register at the given address or possibly null if no value has been assigned.
-
getContextRegisters
Description copied from interface:ProgramContext
Gets the registers for this context that are used for processor context states.- Specified by:
getContextRegisters
in interfaceProgramContext
- Returns:
- all processor context registers
-
getRegister
Description copied from interface:ProgramContext
Get a Register object given the name of a register- Specified by:
getRegister
in interfaceProgramContext
- Parameters:
name
- the name of the register.- Returns:
- The register with the given name or null if no register has that name.
-
getRegisterNames
Description copied from interface:ProgramContext
Get an alphabetical sorted unmodifiable list of original register names (including context registers). Names correspond to orignal register name and not aliases which may be defined.- Specified by:
getRegisterNames
in interfaceProgramContext
- Returns:
- alphabetical sorted unmodifiable list of original register names.
-
getRegisterValueAddressRanges
Description copied from interface:ProgramContext
Returns an AddressRangeIterator over all addresses that have an associated value for the given register. Each range returned will have the same value associated with the register for all addresses in that range.- Specified by:
getRegisterValueAddressRanges
in interfaceProgramContext
- Parameters:
register
- the register for which to get set value ranges.- Returns:
- An AddressRangeIterator over all address that have values for the given register.
-
getRegisterValueAddressRanges
public AddressRangeIterator getRegisterValueAddressRanges(Register register, Address start, Address end) Description copied from interface:ProgramContext
Returns an AddressRangeIterator over all addresses that have an associated value within the given range for the given register. Each range returned will have the same value associated with the register for all addresses in that range.- Specified by:
getRegisterValueAddressRanges
in interfaceProgramContext
- Parameters:
register
- the register for which to get set value ranges.start
- start of address range to searchend
- end of address range to search- Returns:
- An AddressRangeIterator over all address within the given range that have values for the given register.
-
getRegisterValues
-
getRegisters
Description copied from interface:ProgramContext
Get all the register descriptions defined for this program context.- Specified by:
getRegisters
in interfaceProgramContext
- Returns:
- unmodifiable list of defined register descriptions
-
getSigned
- Throws:
UnsupportedOperationException
-
getRegisterValue
Description copied from interface:ProgramContext
Returns a register value and mask for the given register.- Specified by:
getRegisterValue
in interfaceProgramContext
- Parameters:
register
- the registeraddress
- the address of the value- Returns:
- a register value and mask for the given register
-
getValue
Description copied from interface:ProgramContext
Returns the value assigned to a register at a given address. This method will return any default value assigned to the register at the given address if no explicit value has been set at that address.- Specified by:
getValue
in interfaceProgramContext
- Parameters:
register
- the register for which to get its value.address
- the address at which to get a value.signed
- if true, interprets the fix-bit size register value as a signed value.- Returns:
- a BigInteger object containing the value of the registe at the given address or null if no value has been assigned.
-
hasValueOverRange
Description copied from interface:ProgramContext
Returns true if the given register has the value over the addressSet- Specified by:
hasValueOverRange
in interfaceProgramContext
- Parameters:
reg
- the register whose value is to be tested.value
- the value to test for.addrSet
- the set of addresses to test- Returns:
- true if every address in the addrSet has the value.
-
remove
Description copied from interface:ProgramContext
Remove (unset) the register values for a given address range.- Specified by:
remove
in interfaceProgramContext
- Parameters:
start
- starting address.end
- ending adddress.register
- handle to the register to be set.
-
set
-
setDefaultValue
Description copied from interface:DefaultProgramContext
Associates a default value with the given register over the given range.- Specified by:
setDefaultValue
in interfaceDefaultProgramContext
- Parameters:
registerValue
- the register for which to associate a default value.start
- the start address.end
- the end address (inclusive)
-
setValue
Description copied from interface:ProgramContext
Associates a value with a register over a given address range. Any previous values will be overwritten.- Specified by:
setValue
in interfaceProgramContext
- Parameters:
register
- the register for which to assign a value.start
- the start address.end
- the end address (inclusive).value
- the value to assign. A value of null will effective clear any existing values.
-
setRegisterValue
Description copied from interface:ProgramContext
Sets the register context over the given range to the given value.- Specified by:
setRegisterValue
in interfaceProgramContext
- Parameters:
start
- the start address to set valuesend
- the end address to set valuesvalue
- the actual values to store at address
-
invalidateCache
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.- Throws:
IOException
- if a database io error occurs.
-
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.
-
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 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:
IOException
- if a database io error occurs.CancelledException
- if the user cancelled the operation via the task monitor.
-
setProgram
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.
-
getDefaultDisassemblyContext
- Specified by:
getDefaultDisassemblyContext
in interfaceProgramContext
- Returns:
- Get the current default disassembly context to be used when initiating disassmbly
-
setDefaultDisassemblyContext
Description copied from interface:ProgramContext
Set the initial disassembly context to be used when initiating disassmbly- Specified by:
setDefaultDisassemblyContext
in interfaceProgramContext
- Parameters:
newContext
- context register value
-
getRegistersWithValues
Description copied from interface:ProgramContext
Returns an array of all registers that at least one value associated with an address.- Specified by:
getRegistersWithValues
in interfaceProgramContext
- Returns:
- a array of all registers that at least one value associated with an address.
-
getDisassemblyContext
Description copied from interface:ProgramContext
Get the disassembly context for a specified address. This context is formed from the default disassembly context and the context register value stored at the specified address. Those bits specified by the stored context value take precedence.- Specified by:
getDisassemblyContext
in interfaceProgramContext
- Parameters:
address
- program address- Returns:
- disassembly context register value
-
getRegisterValueRangeContaining
Description copied from interface:ProgramContext
Returns the bounding address-range containing addr and the the same RegisterValue throughout. The range returned may be limited by other value changes associated with register's base-register.- Specified by:
getRegisterValueRangeContaining
in interfaceProgramContext
- Parameters:
register
- program registeraddr
- program address- Returns:
- single register-value address-range containing addr
-
hasNonFlowingContext
public boolean hasNonFlowingContext()- Specified by:
hasNonFlowingContext
in interfaceProgramContext
- Returns:
- true if one or more non-flowing context registers fields have been defined within the base processor context register.
-
getFlowValue
Description copied from interface:ProgramContext
Modify register value to eliminate non-flowing bits- Specified by:
getFlowValue
in interfaceProgramContext
- Parameters:
value
- register value to be modified- Returns:
- value suitable for flowing
-
getNonFlowValue
Description copied from interface:ProgramContext
Modify register value to only include non-flowing bits- Specified by:
getNonFlowValue
in interfaceProgramContext
- Parameters:
value
- register value to be modified- Returns:
- new value or null
-