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 the ghidra.program.database packages.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final long
    Reserved key for an invalid key.
  • Method Summary

    Modifier and Type
    Method
    Description
    decodeAddress(long value)
    Returns the address that was used to generate the given long key.
    int
    findKeyRange(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.
    Returns the address factory associated with this map.
    Returns the current image base setting.
    long
    getKey(Address addr, boolean create)
    Get the database key associated with the given relative address.
    getKeyRanges(Address start, Address end, boolean create)
    Generates a properly ordered list of database key ranges for a a specified address range.
    getKeyRanges(Address start, Address end, boolean absolute, boolean create)
    Generates a properly ordered list of database key ranges for a a specified address range.
    getKeyRanges(AddressSetView set, boolean create)
    Generates a properly ordered list of database key ranges for a a specified address set.
    getKeyRanges(AddressSetView set, boolean absolute, boolean create)
    Generates a properly ordered list of database key ranges for a a specified address set.
    Returns an address map capable of decoding old address encodings.
    boolean
    Returns true if this address map has been upgraded.
  • Field Details

    • INVALID_ADDRESS_KEY

      static final long INVALID_ADDRESS_KEY
      Reserved key for an invalid key.
      See Also:
  • Method Details

    • 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(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 search
      addr - 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, or keyRangeList.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

      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. NOTE: if the create parameter is true, the given range must not extend in the upper 32 bits by more than 1 segment. For example, range(0x0000000000000000 - 0x0000000100000000) is acceptable, but the range (0x0000000000000000 - 0x0000000200000000) is not because the upper 32 bits differ by 2.
      Parameters:
      start - the start address of the range
      end - maximum address of range
      create - true if a new keys may be generated, otherwise returned key-ranges will be limited to those already defined. And if true, the range will be limited to a size of 2^32 so that at most it creates two new address bases
      Returns:
      "sorted" list of KeyRange objects
      Throws:
      UnsupportedOperationException - if the given range is so large that the upper 32 bit segments differ by more than 1.
    • getKeyRanges

      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 if create 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

      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 range
      end - maximum address of range
      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
    • getKeyRanges

      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 if create 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.
    • getImageBase

      Address getImageBase()
      Returns the current image base setting.