Package ghidra.program.database
Class ProgramOverlayAddressSpace
java.lang.Object
ghidra.program.model.address.OverlayAddressSpace
ghidra.program.database.ProgramOverlayAddressSpace
- All Implemented Interfaces:
AddressSpace,Comparable<AddressSpace>
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Addressprotected longprotected final Addressprotected final longprotected final intprotected longFields inherited from class ghidra.program.model.address.OverlayAddressSpace
OV_SEPARATERFields inherited from interface ghidra.program.model.address.AddressSpace
DEFAULT_REGISTER_SPACE, EXTERNAL_SPACE, HASH_SPACE, ID_SIZE_MASK, ID_SIZE_SHIFT, ID_TYPE_MASK, ID_UNIQUE_SHIFT, OTHER_SPACE, TYPE_CODE, TYPE_CONSTANT, TYPE_DELETED, TYPE_EXTERNAL, TYPE_IPTR_CONSTANT, TYPE_IPTR_INTERNAL, TYPE_IPTR_SPACEBASE, TYPE_JOIN, TYPE_NONE, TYPE_OTHER, TYPE_RAM, TYPE_REGISTER, TYPE_STACK, TYPE_SYMBOL, TYPE_UNIQUE, TYPE_UNKNOWN, TYPE_VARIABLE, VARIABLE_SPACE -
Constructor Summary
ConstructorsConstructorDescriptionProgramOverlayAddressSpace(long key, String overlayName, AddressSpace baseSpace, int unique, OverlayRegionSupplier overlayRegionSupplier, ProgramAddressFactory factory) -
Method Summary
Modifier and TypeMethodDescriptionCreates a new address (possibly in a new space) by adding the given displacement from the given address.Creates a new address by adding displacement to the given address.addNoWrap(GenericAddress addr, BigInteger displacement) Creates a new address by adding displacement to the given address.Creates a new address by adding displacement to the given address.addWrapSpace(Address addr, long displacement) Creates a new address by adding the displacement to the given address.intcompareTo(AddressSpace space) booleancontains(long offset) Determine if the specified offset is contained within a defined region of this overlay space.getAddress(long offset, boolean isAddressableWordOffset) Returns a new address in this space with the given offset.final AddressgetAddress(String addrString) Parses the String into an address within this address space.intReturns the number of data bytes which correspond to each addressable location within this space (i.e., word-size in bytes).longgetAddressableWordOffset(long byteOffset) Get the addressable memory word offset which corresponds to the specified memory byte offset.longgetKey()Get the DB record key used to store this overlay specification.Get the maximum address allowed for this AddressSpace.Get the minimum address allowed for this AddressSpace.getName()Returns the name of this address space.Get theAddressSetwhich corresponds to overlayed physical region which corresponds to the defined overlay regions within the overlay (i.e., overlay blocks).intReturns the absolute size of a pointer into this space (in bytes).intgetSize()Returns the number of bits that are used to form the address.intGet the ID for this spacegetTruncatedAddress(long offset, boolean isAddressableWordOffset) Returns a new address in this space with the given offset.intgetType()Returns the type of this address spaceintReturns the unique id value for this space.final inthashCode()booleanReturns true if space uses signed offsetprotected voidbooleanReturns true if this space in the constant spacebooleanReturns true if this space in the EXTERNAL_SPACEbooleanReturns true if this space represents a location in the HASH space.booleanReturns true if this space represents a Loaded Memory region (e.g., processor RAM).booleanReturns true if this space represents a memory address.booleanReturns true if this space represents a Non-Loaded storage region for retaining non-loaded file data (e.g., OTHER)booleanReturns true if this space represents a register locationbooleanReturns true if this space represents a stack locationbooleanisSuccessor(Address addr1, Address addr2) Tests whether addr2 immediately follows addr1.booleanReturns true if this space in the unique spacebooleanisValidRange(long byteOffset, long length) Check the specified address range for validity within this space.booleanReturns true if this space represents a variable locationlongmakeValidOffset(long offset) Tests if the offset if valid.voidsetHasMappedRegisters(boolean hasRegisters) Tag this memory space as having memory mapped registersvoidMethod to support renaming an overlay address space instance.voidsetShowSpaceName(boolean b) booleanReturns true if the address should display its addressSpace name.Creates a new address (possibly in a new space) by subtracting the given displacement from the given address.subtractNoWrap(Address addr, long displacement) Creates a new address by subtracting displacement from addr's offset.subtractWrap(Address addr, long displacement) Creates a new address by subtracting displacement from addr's offset.subtractWrapSpace(Address addr, long displacement) Creates a new address by subtracting the displacement from the given address.protected voidtestAddressSpace(Address addr) longtruncateAddressableWordOffset(long wordOffset) Truncate the specified addressable unit/word offset within this space to produce a valid offset.longtruncateOffset(long offset) Truncate the specified byte offset within this space to produce a valid offset.Methods inherited from class ghidra.program.model.address.OverlayAddressSpace
equals, getAddress, getAddress, getAddressInThisSpaceOnly, getBaseSpaceID, getOrderedKey, getOverlayAddress, getOverlayedSpace, getPhysicalSpace, getUncheckedAddress, hasMappedRegisters, isOverlaySpace, subtract, toString, translateAddress, translateAddress
-
Field Details
-
minOffset
protected final long minOffset -
maxOffset
protected long maxOffset -
minAddress
-
maxAddress
-
spaceSize
protected long spaceSize -
spaceID
protected final int spaceID
-
-
Constructor Details
-
ProgramOverlayAddressSpace
public ProgramOverlayAddressSpace(long key, String overlayName, AddressSpace baseSpace, int unique, OverlayRegionSupplier overlayRegionSupplier, ProgramAddressFactory factory) throws DuplicateNameException - Parameters:
key- DB record keyoverlayName- current overlay namebaseSpace- base address space (type should be restricted as neccessary by caller)unique- assigned unique IDoverlayRegionSupplier- callback handler which supplies the defined address set for a specified overlay address space.factory- used to determine a suitable ordered overlay ordered-key used forOverlayAddressSpace.equals(Object)andComparable.compareTo(AddressSpace).- Throws:
DuplicateNameException- if specified name duplicates an existing address space name
-
-
Method Details
-
invalidate
protected void invalidate() -
getKey
public long getKey()Get the DB record key used to store this overlay specification. This is intended to be used internally to reconcile address spaces only.- Returns:
- DB record key
-
getName
Description copied from interface:AddressSpaceReturns the name of this address space. With the exception ofOverlayAddressSpace, the name of an address space may not change. -
setName
Method to support renaming an overlay address space instance. Intended for internal use only.- Parameters:
name- new overlay space name
-
contains
public boolean contains(long offset) Description copied from class:OverlayAddressSpaceDetermine if the specified offset is contained within a defined region of this overlay space.- Specified by:
containsin classOverlayAddressSpace- Parameters:
offset- unsigned address offset- Returns:
- true if contained within defined region otherwise false
-
getOverlayAddressSet
Description copied from class:OverlayAddressSpaceGet theAddressSetwhich corresponds to overlayed physical region which corresponds to the defined overlay regions within the overlay (i.e., overlay blocks).- Specified by:
getOverlayAddressSetin classOverlayAddressSpace- Returns:
- defined regions within the overlay. All addresses are overlay addresses.
-
hasSignedOffset
public boolean hasSignedOffset()Description copied from interface:AddressSpaceReturns true if space uses signed offset- Specified by:
hasSignedOffsetin interfaceAddressSpace
-
getSize
public int getSize()Description copied from interface:AddressSpaceReturns the number of bits that are used to form the address. Thus the maximum offset for this address space will be 2^size-1.- Specified by:
getSizein interfaceAddressSpace
-
getAddressableUnitSize
public int getAddressableUnitSize()Description copied from interface:AddressSpaceReturns the number of data bytes which correspond to each addressable location within this space (i.e., word-size in bytes). NOTE: When transforming a byte-offset to an addressable word offset the methodAddressSpace.getAddressableWordOffset(long)should be used instead of simple division. When transforming an addressable word-offset to a byte-offset simple multiplication may be used. Neither of these transformations perform address space bounds checking.byteOffset = wordOffset * addressUnitSize wordOffset = getAddressableWordOffset(byteOffset)
- Specified by:
getAddressableUnitSizein interfaceAddressSpace
-
getAddressableWordOffset
public long getAddressableWordOffset(long byteOffset) Description copied from interface:AddressSpaceGet the addressable memory word offset which corresponds to the specified memory byte offset. This method handles some of the issues of unsigned math when stuck using Java's signed long primitives. No space bounds checking is performed.- Specified by:
getAddressableWordOffsetin interfaceAddressSpace- Parameters:
byteOffset- memory byte offset- Returns:
- addressable memory word offset
-
getPointerSize
public int getPointerSize()Description copied from interface:AddressSpaceReturns the absolute size of a pointer into this space (in bytes).- Specified by:
getPointerSizein interfaceAddressSpace- See Also:
-
getType
public int getType()Description copied from interface:AddressSpaceReturns the type of this address space- Specified by:
getTypein interfaceAddressSpace
-
getUnique
public int getUnique()Returns the unique id value for this space.- Specified by:
getUniquein interfaceAddressSpace
-
getAddress
Description copied from interface:AddressSpaceParses the String into an address within this address space.- Specified by:
getAddressin interfaceAddressSpace- Parameters:
addrString- the string to parse as an address.- Returns:
- an address if the string parsed successfully or null if the AddressSpace specified in the addrString is not this space.
- Throws:
AddressFormatException- if the string cannot be parsed or the parsed offset is larger than the size for this space.
-
getAddress
public Address getAddress(long offset, boolean isAddressableWordOffset) throws AddressOutOfBoundsException Description copied from interface:AddressSpaceReturns a new address in this space with the given offset. NOTE: for those spaces with an addressable unit size other than 1, the address returned may not correspond to an addressable unit/word boundary if a byte-offset is specified.- Specified by:
getAddressin interfaceAddressSpace- Parameters:
offset- the offset for the new address.isAddressableWordOffset- if true the specified offset is an addressable unit/word offset, otherwise offset is a byte offset. SeeAddressSpace.getAddressableUnitSize()to understand the distinction (i.e., wordOffset = byteOffset * addressableUnitSize).- Returns:
- address with given offset
- Throws:
AddressOutOfBoundsException- if the offset is less than 0 or greater than the max offset allowed for this space.
-
getTruncatedAddress
Description copied from interface:AddressSpaceReturns a new address in this space with the given offset. The specified offset will be truncated within the space and will not throw an exception. NOTE: for those spaces with an addressable unit size other than 1, the address returned may not correspond to a word boundary (addressable unit) if a byte-offset is specified.- Specified by:
getTruncatedAddressin interfaceAddressSpace- Parameters:
offset- the offset for the new address.isAddressableWordOffset- if true the specified offset is an addressable unit/word offset, otherwise offset is a byte offset. SeeAddressSpace.getAddressableUnitSize()to understand the distinction (i.e., wordOffset = byteOffset * addressableUnitSize).- Returns:
- address with given byte offset truncated to the physical space size
-
subtractWrap
Description copied from interface:AddressSpaceCreates a new address by subtracting displacement from addr's offset.- Specified by:
subtractWrapin interfaceAddressSpace- Parameters:
addr- the original address. The new address will wrap in a manner that depends on the address space. For a generic address space this will wrap at the extents of the address space. For a segmented address space it will wrap at the extents of the segment.displacement- the displacement to subtract.- Returns:
- a new address created by subtracting the displacement from addr.offset.
-
subtractWrapSpace
Description copied from interface:AddressSpaceCreates a new address by subtracting the displacement from the given address. If the offset is greater than the max offset of the address space, the high order bits are masked off, making the address wrap. For non-segmented addresses this will be the same as subtractWrap(). For segmented addresses, the address will wrap when the 20 bit (oxfffff) offset is exceeded, as opposed to when the segment offset is exceeded.- Specified by:
subtractWrapSpacein interfaceAddressSpace- Parameters:
addr- the address to subtract the displacement from.displacement- the displacement to subtract.- Returns:
- The new Address formed by subtracting the displacement from the specified address.
-
subtractNoWrap
Description copied from interface:AddressSpaceCreates a new address by subtracting displacement from addr's offset. The new offset will NOT wrap!- Specified by:
subtractNoWrapin interfaceAddressSpace- Parameters:
addr- the original addressdisplacement- the displacement to subtract.- Returns:
- The new address created by subtracting displacement from addr.offset.
- Throws:
AddressOverflowException- if the subtraction would cause a wrap,
-
subtract
Description copied from interface:AddressSpaceCreates a new address (possibly in a new space) by subtracting the given displacement from the given address.- Specified by:
subtractin interfaceAddressSpace- Parameters:
addr- original address being subtracted fromdisplacement- amount to subtract- Returns:
- the new address
-
addWrap
Description copied from interface:AddressSpaceCreates a new address by adding displacement to the given address. The resulting address may wrap. The new address will wrap in a manner that depends on the address space. For a generic address space this will wrap at the extents of the address space. For a segmented address space it will wrap at the extents of the segment.- Specified by:
addWrapin interfaceAddressSpace- Parameters:
addr- the original address.displacement- the displacement to add.- Returns:
- the new address created by adding displacement to addr.offset.
-
addWrapSpace
Description copied from interface:AddressSpaceCreates a new address by adding the displacement to the given address. If the offset is greater than the max offset of the address space, the high order bits are masked off, making the address wrap. For non-segmented addresses this will be the same as addWrap(). For segmented addresses, the address will wrap when the 20 bit (oxfffff) offset is exceeded, as opposed to when the segment offset is exceeded.- Specified by:
addWrapSpacein interfaceAddressSpace- Parameters:
addr- the address to add the displacement to.displacement- the displacement to add.- Returns:
- The new Address formed by adding the displacement to the specified addresst.
-
addNoWrap
Description copied from interface:AddressSpaceCreates a new address by adding displacement to the given address. The new address will NOT wrap!- Specified by:
addNoWrapin interfaceAddressSpace- Parameters:
addr- the original address.displacement- the displacement to add.- Returns:
- The new address created by adding displacement to addr.offset.
- Throws:
AddressOverflowException- if the addition would cause a wrap,
-
addNoWrap
public Address addNoWrap(GenericAddress addr, BigInteger displacement) throws AddressOverflowException Description copied from interface:AddressSpaceCreates a new address by adding displacement to the given address. The new address will NOT wrap!- Specified by:
addNoWrapin interfaceAddressSpace- Parameters:
addr- the original address.displacement- the displacement to add.- Returns:
- The new address created by adding displacement to addr.offset.
- Throws:
AddressOverflowException- if the addition would cause a wrap,
-
add
Description copied from interface:AddressSpaceCreates a new address (possibly in a new space) by adding the given displacement from the given address.- Specified by:
addin interfaceAddressSpace- Parameters:
addr- original address being subtracted fromdisplacement- amount to subtract- Returns:
- the new address
- Throws:
AddressOutOfBoundsException- if the result does not correspond to any address.
-
isValidRange
public boolean isValidRange(long byteOffset, long length) Description copied from interface:AddressSpaceCheck the specified address range for validity within this space. Segmented spaces will restrict a range to a single segment.- Specified by:
isValidRangein interfaceAddressSpace- Parameters:
byteOffset-length-- Returns:
- true if range is valid for this space
-
isSuccessor
Description copied from interface:AddressSpaceTests whether addr2 immediately follows addr1.- Specified by:
isSuccessorin interfaceAddressSpace- Parameters:
addr1- the first address.addr2- the second address.
-
getMaxAddress
Description copied from interface:AddressSpaceGet the maximum address allowed for this AddressSpace. NOTE: Use of this method to identify the region associated with an overlay memory block within its overlay address space is no longer supported. Defined regions of an overlay space may now be determined usingOverlayAddressSpace.getOverlayAddressSet().- Specified by:
getMaxAddressin interfaceAddressSpace- Returns:
- maximum address of this address space.
-
getMinAddress
Description copied from interface:AddressSpaceGet the minimum address allowed for this AddressSpace. For a memory space the returned address will have an offset of 0 within this address space. NOTE: Use of this method to identify the region associated with an overlay memory block within its overlay address space is no longer supported. Defined regions of an overlay space may now be determined usingOverlayAddressSpace.getOverlayAddressSet().- Specified by:
getMinAddressin interfaceAddressSpace- Returns:
- minimum address of this address space.
-
compareTo
- Specified by:
compareToin interfaceComparable<AddressSpace>
-
hashCode
public final int hashCode() -
getSpaceID
public int getSpaceID()Description copied from interface:AddressSpaceGet the ID for this space- Specified by:
getSpaceIDin interfaceAddressSpace- Returns:
- space ID
-
testAddressSpace
-
showSpaceName
public boolean showSpaceName()Description copied from interface:AddressSpaceReturns true if the address should display its addressSpace name.- Specified by:
showSpaceNamein interfaceAddressSpace
-
makeValidOffset
Description copied from interface:AddressSpaceTests if the offset if valid. If the space is signed, then it sign extends the offset.- Specified by:
makeValidOffsetin interfaceAddressSpace- Parameters:
offset- the offset to test and/or sign extend- Returns:
- the valid positive offset or appropriate sign extended offset.
- Throws:
AddressOutOfBoundsException- if offset is invalid
-
truncateOffset
public long truncateOffset(long offset) Description copied from interface:AddressSpaceTruncate the specified byte offset within this space to produce a valid offset.- Specified by:
truncateOffsetin interfaceAddressSpace- Parameters:
offset- any byte offset- Returns:
- truncated byte offset
-
truncateAddressableWordOffset
public long truncateAddressableWordOffset(long wordOffset) Description copied from interface:AddressSpaceTruncate the specified addressable unit/word offset within this space to produce a valid offset.- Specified by:
truncateAddressableWordOffsetin interfaceAddressSpace- Parameters:
wordOffset- any addressable unit/word offset- Returns:
- truncated word offset
-
isMemorySpace
public boolean isMemorySpace()Description copied from interface:AddressSpaceReturns true if this space represents a memory address. NOTE: It is important to make the distinction between Loaded and Non-Loaded memory addresses. Program importers may create memory blocks associated with Non-Loaded file content which are not associated with processor defined memory regions. While Loaded file content is placed into memory blocks which are associated with specific memory address spaces defined by the processor language specification.- Specified by:
isMemorySpacein interfaceAddressSpace- See Also:
-
isLoadedMemorySpace
public boolean isLoadedMemorySpace()Description copied from interface:AddressSpaceReturns true if this space represents a Loaded Memory region (e.g., processor RAM).- Specified by:
isLoadedMemorySpacein interfaceAddressSpace
-
isNonLoadedMemorySpace
public boolean isNonLoadedMemorySpace()Description copied from interface:AddressSpaceReturns true if this space represents a Non-Loaded storage region for retaining non-loaded file data (e.g., OTHER)- Specified by:
isNonLoadedMemorySpacein interfaceAddressSpace
-
isHashSpace
public boolean isHashSpace()Description copied from interface:AddressSpaceReturns true if this space represents a location in the HASH space.- Specified by:
isHashSpacein interfaceAddressSpace
-
isRegisterSpace
public boolean isRegisterSpace()Description copied from interface:AddressSpaceReturns true if this space represents a register location- Specified by:
isRegisterSpacein interfaceAddressSpace
-
isStackSpace
public boolean isStackSpace()Description copied from interface:AddressSpaceReturns true if this space represents a stack location- Specified by:
isStackSpacein interfaceAddressSpace
-
isUniqueSpace
public boolean isUniqueSpace()Description copied from interface:AddressSpaceReturns true if this space in the unique space- Specified by:
isUniqueSpacein interfaceAddressSpace
-
isConstantSpace
public boolean isConstantSpace()Description copied from interface:AddressSpaceReturns true if this space in the constant space- Specified by:
isConstantSpacein interfaceAddressSpace
-
isVariableSpace
public boolean isVariableSpace()Description copied from interface:AddressSpaceReturns true if this space represents a variable location- Specified by:
isVariableSpacein interfaceAddressSpace
-
isExternalSpace
public boolean isExternalSpace()Description copied from interface:AddressSpaceReturns true if this space in the EXTERNAL_SPACE- Specified by:
isExternalSpacein interfaceAddressSpace
-
setShowSpaceName
public void setShowSpaceName(boolean b) -
setHasMappedRegisters
public void setHasMappedRegisters(boolean hasRegisters) Tag this memory space as having memory mapped registers- Parameters:
hasRegisters- true if it has registers, false otherwise
-