Package ghidra.program.database.map
Interface AddressMap
-
- All Known Implementing Classes:
AddressMapDB
public interface AddressMap
Address map interface add methods need by the program database implementation to manage its address map. NOTE: Objects implementing this interface are not intended for use outside of theghidra.program.database
packages.
-
-
Field Summary
Fields Modifier and Type Field Description static long
INVALID_ADDRESS_KEY
Reserved key for an invalid key.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description Address
decodeAddress(long value)
Returns the address that was used to generate the given long key.void
deleteOverlaySpace(java.lang.String name)
Delete the specified overlay space from this address map.int
findKeyRange(java.util.List<KeyRange> keyRangeList, Address addr)
Search for addr within the "sorted" keyRangeList and return the index of the keyRange which contains the specified addr.long
getAbsoluteEncoding(Address addr, boolean create)
Get the database key associated with the given absolute address.AddressFactory
getAddressFactory()
Returns the address factory associated with this map.Address
getImageBase()
Returns the current image base setting.long
getKey(Address addr, boolean create)
Get the database key associated with the given relative address.java.util.List<KeyRange>
getKeyRanges(Address start, Address end, boolean create)
Generates a properly ordered list of database key ranges for a a specified address range.java.util.List<KeyRange>
getKeyRanges(Address start, Address end, boolean absolute, boolean create)
Generates a properly ordered list of database key ranges for a a specified address range.java.util.List<KeyRange>
getKeyRanges(AddressSetView set, boolean create)
Generates a properly ordered list of database key ranges for a a specified address set.java.util.List<KeyRange>
getKeyRanges(AddressSetView set, boolean absolute, boolean create)
Generates a properly ordered list of database key ranges for a a specified address set.int
getModCount()
Returns a modification number that always increases when the address map base table has changed.AddressMap
getOldAddressMap()
Returns an address map capable of decoding old address encodings.boolean
hasSameKeyBase(long addrKey1, long addrKey2)
Returns true if the two address keys share a common key base and can be used within a single key-range.void
invalidateCache()
Clears any cached values.boolean
isKeyRangeMax(long addrKey)
Returns true if the specified addrKey is the maximum key within its key-range.boolean
isKeyRangeMin(long addrKey)
Returns true if the specified addrKey is the minimum key within its key-range.boolean
isUpgraded()
Returns true if this address map has been upgraded.void
renameOverlaySpace(java.lang.String oldName, java.lang.String newName)
Rename an existing overlay space.void
setImageBase(Address base)
Sets the image base, effectively changing the mapping between addresses and longs.void
setLanguage(Language newLanguage, AddressFactory addrFactory, LanguageTranslator translator)
Converts the current base addresses to addresses compatible with the new language.
-
-
-
Field Detail
-
INVALID_ADDRESS_KEY
static final long INVALID_ADDRESS_KEY
Reserved key for an invalid key.- See Also:
- Constant Field Values
-
-
Method Detail
-
getKey
long getKey(Address addr, boolean create)
Get the database key associated with the given relative address. This key uniquely identifies a relative location within the program. If the program's image base is moved to another address, this key will map to a new address that is the same distance to the new base as the old address was to the old base. If the requested key does not exist and create is false, INVALID_ADDRESS_KEY will be returned. Note that nothing should ever be stored using the returned key unless create is true.- Parameters:
addr
- the address for which to get a database key.create
- true if a new key may be generated- Returns:
- the database key for the given address or INVALID_ADDRESS_KEY if create is false and one does not exist for the specified addr.
-
getAbsoluteEncoding
long getAbsoluteEncoding(Address addr, boolean create)
Get the database key associated with the given absolute address. This key uniquely identifies an absolute location within the program. If the requested key does not exist and create is false, INVALID_ADDRESS_KEY will be returned. Note that nothing should ever be stored using the returned key unless create is true.- Parameters:
addr
- the address for which to get a database key.create
- true if a new key may be generated- Returns:
- the database key for the given address or INVALID_ADDRESS_KEY if create is false and one does not exist for the specified addr.
-
findKeyRange
int findKeyRange(java.util.List<KeyRange> keyRangeList, Address addr)
Search for addr within the "sorted" keyRangeList and return the index of the keyRange which contains the specified addr.- Parameters:
keyRangeList
- key range list to searchaddr
- address or null- Returns:
- index of the keyRange within the keyRangeList which contains addr
if it is contained in the list; otherwise,
(-(insertion point) - 1)
. The insertion point is defined as the point at which the addr would be inserted into the list: the index of the first keyRange greater than addr, orkeyRangeList.size()
, if all keyRanges in the list are less than the specified addr. Note that this guarantees that the return value will be >= 0 if and only if the addr is found within a keyRange. An addr of null will always result in a returned index of -1.
-
getKeyRanges
java.util.List<KeyRange> getKeyRanges(Address start, Address end, boolean create)
Generates a properly ordered list of database key ranges for a a specified address range. If absolute encodings are requested, only memory addresses will be included. Returned key ranges are generally intended for read-only operations since new keys will never be generated. The returned key ranges will correspond to those key ranges which have previously been created within the specified address range and may represent a much smaller subset of addresses within the specified range.- Parameters:
start
- minimum address of rangeend
- maximum address of rangecreate
- true if a new keys may be generated, otherwise returned key-ranges will be limited to those already defined.- Returns:
- "sorted" list of KeyRange objects
-
getKeyRanges
java.util.List<KeyRange> getKeyRanges(AddressSetView set, boolean create)
Generates a properly ordered list of database key ranges for a a specified address set. If absolute encodings are requested, only memory addresses will be included.- Parameters:
set
- address set or null for all addresses. May not be null ifcreate
is true.create
- true if a new keys may be generated, otherwise returned key-ranges will be limited to those already defined.- Returns:
- "sorted" list of KeyRange objects
-
decodeAddress
Address decodeAddress(long value)
Returns the address that was used to generate the given long key. (If the image base was moved, then a different address is returned unless the value was encoded using the "absoluteEncoding" method. If the program's default address space is segmented (i.e., SegmentedAddressSpace). the address returned will be always be normalized to defined segmented memory blocks if possible.- Parameters:
value
- the long value to convert to an address.- Returns:
- address decoded from long
-
getAddressFactory
AddressFactory getAddressFactory()
Returns the address factory associated with this map. Null may be returned if map not associated with a specific address factory.- Returns:
- associated
AddressFactory
or null
-
getKeyRanges
java.util.List<KeyRange> getKeyRanges(Address start, Address end, boolean absolute, boolean create)
Generates a properly ordered list of database key ranges for a a specified address range. If absolute encodings are requested, only memory addresses will be included.- Parameters:
start
- minimum address of rangeend
- maximum address of rangeabsolute
- if true, absolute key encodings are returned, otherwise standard/relocatable address key encodings are returned.create
- true if a new keys may be generated, otherwise returned key-ranges will be limited to those already defined.- Returns:
- "sorted" list of KeyRange objects
-
getKeyRanges
java.util.List<KeyRange> getKeyRanges(AddressSetView set, boolean absolute, boolean create)
Generates a properly ordered list of database key ranges for a a specified address set. If absolute encodings are requested, only memory addresses will be included.- Parameters:
set
- address set or null for all addresses. May not be null ifcreate
is true.absolute
- if true, absolute key encodings are returned, otherwise standard/relocatable address key encodings are returned.create
- true if a new keys may be generated, otherwise returned key-ranges will be limited to those already defined.- Returns:
- "sorted" list of KeyRange objects
-
getOldAddressMap
AddressMap getOldAddressMap()
Returns an address map capable of decoding old address encodings.
-
isUpgraded
boolean isUpgraded()
Returns true if this address map has been upgraded.
-
setImageBase
void setImageBase(Address base)
Sets the image base, effectively changing the mapping between addresses and longs.- Parameters:
base
- the new base address.
-
getModCount
int getModCount()
Returns a modification number that always increases when the address map base table has changed.
-
getImageBase
Address getImageBase()
Returns the current image base setting.
-
setLanguage
void setLanguage(Language newLanguage, AddressFactory addrFactory, LanguageTranslator translator) throws java.io.IOException
Converts the current base addresses to addresses compatible with the new language.- Parameters:
newLanguage
- the new language to use.addrFactory
- the new AddressFactory.translator
- translates address spaces from the old language to the new language.- Throws:
java.io.IOException
-
invalidateCache
void invalidateCache() throws java.io.IOException
Clears any cached values.- Throws:
java.io.IOException
-
renameOverlaySpace
void renameOverlaySpace(java.lang.String oldName, java.lang.String newName) throws java.io.IOException
Rename an existing overlay space.- Parameters:
oldName
- old overlay namenewName
- new overlay name (must be unique among all space names within this map)- Throws:
java.io.IOException
-
deleteOverlaySpace
void deleteOverlaySpace(java.lang.String name) throws java.io.IOException
Delete the specified overlay space from this address map.- Parameters:
name
- overlay space name (must be unique among all space names within this map)- Throws:
java.io.IOException
-
hasSameKeyBase
boolean hasSameKeyBase(long addrKey1, long addrKey2)
Returns true if the two address keys share a common key base and can be used within a single key-range.- Parameters:
addrKey1
-addrKey2
-
-
isKeyRangeMin
boolean isKeyRangeMin(long addrKey)
Returns true if the specified addrKey is the minimum key within its key-range.- Parameters:
addrKey
-
-
isKeyRangeMax
boolean isKeyRangeMax(long addrKey)
Returns true if the specified addrKey is the maximum key within its key-range.- Parameters:
addrKey
-
-
-