Package ghidra.program.disassemble
Class Disassembler.DisassemblerProgramContext
- java.lang.Object
-
- ghidra.program.util.AbstractProgramContext
-
- ghidra.program.disassemble.Disassembler.DisassemblerProgramContext
-
- All Implemented Interfaces:
DefaultProgramContext,ProgramContext
- Enclosing class:
- Disassembler
protected class Disassembler.DisassemblerProgramContext extends AbstractProgramContext
DisassemblerProgramContextis used as a proxy program context due to the delayed nature of laying down instructions and their associated context state. This is used to track context not yet committed for use by the DisassemblerContext in place of the true program context.
-
-
Field Summary
-
Fields inherited from class ghidra.program.util.AbstractProgramContext
baseContextRegister, defaultDisassemblyContext, registerNameMap, registers
-
-
Method Summary
All Methods Instance Methods Concrete Methods Change Modifier and Type Method Description NEW AddressRangeIteratorgetDefaultRegisterValueAddressRanges(Register register)Returns an AddressRangeIterator over all addresses that have an associated default value for the given register.NEW AddressRangeIteratorgetDefaultRegisterValueAddressRanges(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.NEW RegisterValuegetDefaultValue(Register register, Address address)Returns the default value of a register at a given address.NEW RegisterValuegetDisassemblyContext(Address address)Get the disassembly context for a specified address.NEW RegisterValuegetNonDefaultValue(Register register, Address address)Returns the (non-default)value assigned to a register at a given address.MODIFIED Register[]getRegistersWithValues()Returns an array of all registers that at least one value associated with an address.NEW RegisterValuegetRegisterValue(Register register, Address address)Returns a register value and mask for the given register.NEW AddressRangeIteratorgetRegisterValueAddressRanges(Register register)Returns an AddressRangeIterator over all addresses that have an associated value for the given register.NEW AddressRangeIteratorgetRegisterValueAddressRanges(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.NEW AddressRangegetRegisterValueRangeContaining(Register register, Address addr)Returns the bounding address-range containing addr and the the same RegisterValue throughout.NEW java.math.BigIntegergetValue(Register register, Address address, boolean signed)Returns the value assigned to a register at a given address.NEW booleanhasValueOverRange(Register reg, java.math.BigInteger value, AddressSetView addrSet)Returns true if the given register has the value over the addressSetNEW voidremove(Address start, Address end, Register register)Remove (unset) the register values for a given address range.NEW voidsetDefaultValue(RegisterValue registerValue, Address start, Address end)Associates a default value with the given register over the given range.NEW voidsetRegisterValue(Address start, Address end, RegisterValue value)Sets the register context over the given range to the given value.NEW voidsetValue(Register register, Address start, Address end, java.math.BigInteger value)Associates a value with a register over a given address range.-
Methods inherited from class ghidra.program.util.AbstractProgramContext
getBaseContextRegister, getDefaultDisassemblyContext, getFlowValue, getNonFlowValue, getProcessorStateRegisters, getRegister, getRegisterNames, getRegisters, hasNonFlowingContext, initNameMap, setDefaultDisassemblyContext
-
-
-
-
Method Detail
-
getRegistersWithValues MODIFIED
return type: Register[] → ghidra.program.model.lang.Register[]-Register[] getRegistersWithValues()+ghidra.program.model.lang.Register[] getRegistersWithValues()public Register[] getRegistersWithValues()
Description copied from interface:ProgramContextReturns an array of all registers that at least one value associated with an address.- Returns:
- a array of all registers that at least one value associated with an address.
-
getValue NEW
public java.math.BigInteger getValue(Register register, Address address, boolean signed)
Description copied from interface:ProgramContextReturns 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.- 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.
-
getRegisterValue NEW
public RegisterValue getRegisterValue(Register register, Address address)
Description copied from interface:ProgramContextReturns a register value and mask for the given register.- Parameters:
register- the registeraddress- the address of the value- Returns:
- a register value and mask for the given register
-
setRegisterValue NEW
public void setRegisterValue(Address start, Address end, RegisterValue value)
Description copied from interface:ProgramContextSets the register context over the given range to the given value.- Parameters:
start- the start address to set valuesend- the end address to set valuesvalue- the actual values to store at address
-
getNonDefaultValue NEW
public RegisterValue getNonDefaultValue(Register register, Address address)
Description copied from interface:ProgramContextReturns the (non-default)value assigned to a register at a given address.- 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.
-
setValue NEW
public void setValue(Register register, Address start, Address end, java.math.BigInteger value) throws ContextChangeException
Description copied from interface:ProgramContextAssociates a value with a register over a given address range. Any previous values will be overwritten.- 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.- Throws:
ContextChangeException
-
getRegisterValueAddressRanges NEW
public AddressRangeIterator getRegisterValueAddressRanges(Register register)
Description copied from interface:ProgramContextReturns 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.- 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 NEW
public AddressRangeIterator getRegisterValueAddressRanges(Register register, Address start, Address end)
Description copied from interface:ProgramContextReturns 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.- Parameters:
register- the register for which to get set value ranges.- Returns:
- An AddressRangeIterator over all address within the given range that have values for the given register.
-
getRegisterValueRangeContaining NEW
public AddressRange getRegisterValueRangeContaining(Register register, Address addr)
Description copied from interface:ProgramContextReturns 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.- Returns:
- single register-value address-range containing addr
-
getDefaultRegisterValueAddressRanges NEW
public AddressRangeIterator getDefaultRegisterValueAddressRanges(Register register)
Description copied from interface:ProgramContextReturns 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.- 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 NEW
public AddressRangeIterator getDefaultRegisterValueAddressRanges(Register register, Address start, Address end)
Description copied from interface:ProgramContextReturns 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.- Parameters:
register- the register for which to get default value ranges.- Returns:
- An AddressRangeIterator over all address within the given range that have default values for the given register.
-
setDefaultValue NEW
public void setDefaultValue(RegisterValue registerValue, Address start, Address end)
Description copied from interface:DefaultProgramContextAssociates a default value with the given register over the given range.- Parameters:
registerValue- the register for which to associate a default value.start- the start address.end- the end address (inclusive)
-
remove NEW
public void remove(Address start, Address end, Register register) throws ContextChangeException
Description copied from interface:ProgramContextRemove (unset) the register values for a given address range.- Parameters:
start- starting address.end- ending adddress.register- handle to the register to be set.- Throws:
ContextChangeException
-
hasValueOverRange NEW
public boolean hasValueOverRange(Register reg, java.math.BigInteger value, AddressSetView addrSet)
Description copied from interface:ProgramContextReturns true if the given register has the value over the addressSet- 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.
-
getDefaultValue NEW
public RegisterValue getDefaultValue(Register register, Address address)
Description copied from interface:ProgramContextReturns the default value of a register at a given address.- 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.
-
getDisassemblyContext NEW
public RegisterValue getDisassemblyContext(Address address)
Description copied from interface:ProgramContextGet 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.- Returns:
- disassembly context register value
-
-