Package ghidra.program.database.mem

# Class MemoryBlockDB

java.lang.Object
ghidra.program.database.mem.MemoryBlockDB

All Implemented Interfaces:
  `MemoryBlock`, `Serializable`, `Comparable<MemoryBlock>`

public class MemoryBlockDB extends Object implements MemoryBlock

See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected MemoryMapDB`
  `memMap`
  `protected DBRecord`
  `record`

  ### Fields inherited from interface ghidra.program.model.mem.MemoryBlock

  `EXECUTE, EXTERNAL_BLOCK_NAME, READ, VOLATILE, WRITE`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `compareTo(MemoryBlock o)`
  `boolean`
  `contains(Address addr)`
  Return whether addr is contained in this block.
  `AddressRange`
  `getAddressRange()`
  Get the address range that corresponds to this block.
  `protected long`
  `getBlockOffset(Address addr)`
  `byte`
  `getByte(long offset)`
  `byte`
  `getByte(Address addr)`
  Returns the byte at the given address in this block.
  `int`
  `getBytes(long offset, byte[] b, int off, int len)`
  `int`
  `getBytes(Address addr, byte[] b)`
  Tries to get b.length bytes from this block at the given address.
  `int`
  `getBytes(Address addr, byte[] b, int off, int len)`
  Tries to get len bytes from this block at the given address and put them into the given byte array at the specified offet.
  `String`
  `getComment()`
  Get the comment associated with this block.
  `InputStream`
  `getData()`
  Get memory data in the form of an InputStream.
  `Address`
  `getEnd()`
  Return the end address of this block.
  `String`
  `getName()`
  Get the name of this block
  `int`
  `getPermissions()`
  Returns block permissions as a bit mask.
  `long`
  `getSize()`
  Get the number of bytes in this block.
  `BigInteger`
  `getSizeAsBigInteger()`
  Get the number of bytes in this block.
  `List<MemoryBlockSourceInfo>`
  `getSourceInfos()`
  Returns a list of `MemoryBlockSourceInfo` objects for this block.
  `String`
  `getSourceName()`
  Get the name of the source of this memory block.
  `Address`
  `getStart()`
  Return the starting address for this block.
  `MemoryBlockType`
  `getType()`
  Get the type for this block: DEFAULT, BIT_MAPPED, or BYTE_MAPPED (see `MemoryBlockType`).
  `void`
  `invalidate()`
  `boolean`
  `isExecute()`
  Returns the value of the execute property associated with this block
  `boolean`
  `isInitialized()`
  Return whether this block has been initialized.
  `boolean`
  `isLoaded()`
  Returns true if this memory block is a real loaded block (i.e.
  `boolean`
  `isMapped()`
  Returns true if this is either a bit-mapped or byte-mapped block
  `boolean`
  `isOverlay()`
  Returns true if this is an overlay block (i.e., contained within overlay space).
  `boolean`
  `isRead()`
  Returns the value of the read property associated with this block
  `boolean`
  `isVolatile()`
  Returns the value of the volatile property associated with this block.
  `boolean`
  `isWrite()`
  Returns the value of the write property associated with this block
  `void`
  `putByte(Address addr, byte b)`
  Puts the given byte at the given address in this block.
  `int`
  `putBytes(Address addr, byte[] b)`
  Tries to put b.length bytes from the specified byte array to this block.
  `int`
  `putBytes(Address addr, byte[] b, int off, int len)`
  Tries to put len bytes from the specified byte array to this block.
  `void`
  `setComment(String comment)`
  Set the comment associated with this block.
  `void`
  `setExecute(boolean x)`
  Sets the execute property associated with this block.
  `void`
  `setName(String name)`
  Set the name for this block (See `NamingUtilities.isValidName(String)` for naming rules).
  `void`
  `setPermissions(boolean read, boolean write, boolean execute)`
  Sets the read, write, execute permissions on this block
  `void`
  `setRead(boolean r)`
  Sets the read property associated with this block.
  `void`
  `setSourceName(String sourceName)`
  Sets the name of the source file that provided the data.
  `void`
  `setVolatile(boolean v)`
  Sets the volatile property associated with this block.
  `void`
  `setWrite(boolean w)`
  Sets the write property associated with this block.
  `String`
  `toString()`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface ghidra.program.model.mem.MemoryBlock

  `isExternalBlock`

- ## Field Details

  - ### record

    protected DBRecord record

  - ### memMap

    protected MemoryMapDB memMap

- ## Method Details

  - ### compareTo

    public int compareTo(MemoryBlock o)
    Specified by:
      `compareTo` in interface `Comparable<MemoryBlock>`

  - ### getPermissions

    public int getPermissions()
    Description copied from interface: `MemoryBlock`
    Returns block permissions as a bit mask. Permission bits defined as READ, WRITE, EXECUTE and VOLATILE
    Specified by:
      `getPermissions` in interface `MemoryBlock`

  - ### getData

    public InputStream getData()
    Description copied from interface: `MemoryBlock`
    Get memory data in the form of an InputStream. Null is returned for thos memory blocks which have no data.
    Specified by:
      `getData` in interface `MemoryBlock`

  - ### contains

    public boolean contains(Address addr)
    Description copied from interface: `MemoryBlock`
    Return whether addr is contained in this block.
    Specified by:
      `contains` in interface `MemoryBlock`
    Parameters:
      `addr` - address

  - ### getStart

    public Address getStart()
    Description copied from interface: `MemoryBlock`
    Return the starting address for this block.
    Specified by:
      `getStart` in interface `MemoryBlock`
    Returns:
      block's start address

  - ### getEnd

    public Address getEnd()
    Description copied from interface: `MemoryBlock`
    Return the end address of this block.
    Specified by:
      `getEnd` in interface `MemoryBlock`
    Returns:
      end address of the block

  - ### getSize

    public long getSize()
    Description copied from interface: `MemoryBlock`
    Get the number of bytes in this block.
    Specified by:
      `getSize` in interface `MemoryBlock`
    Returns:
      number of bytes in the block

  - ### getSizeAsBigInteger

    public BigInteger getSizeAsBigInteger()
    Description copied from interface: `MemoryBlock`
    Get the number of bytes in this block.
    Specified by:
      `getSizeAsBigInteger` in interface `MemoryBlock`
    Returns:
      the number of bytes in this block as a BigInteger

  - ### getAddressRange

    public AddressRange getAddressRange()
    Description copied from interface: `MemoryBlock`
    Get the address range that corresponds to this block.
    Specified by:
      `getAddressRange` in interface `MemoryBlock`
    Returns:
      block address range

  - ### getName

    public String getName()
    Description copied from interface: `MemoryBlock`
    Get the name of this block
    Specified by:
      `getName` in interface `MemoryBlock`

  - ### setName

    public void setName(String name) throws LockException
    Description copied from interface: `MemoryBlock`
    Set the name for this block (See `NamingUtilities.isValidName(String)` for naming rules). Specified name must not conflict with an address space name.
    Specified by:
      `setName` in interface `MemoryBlock`
    Parameters:
      `name` - the new name for this block.
    Throws:
      `LockException` - renaming an Overlay block without exclusive access

  - ### getComment

    public String getComment()
    Description copied from interface: `MemoryBlock`
    Get the comment associated with this block.
    Specified by:
      `getComment` in interface `MemoryBlock`

  - ### setComment

    public void setComment(String comment)
    Description copied from interface: `MemoryBlock`
    Set the comment associated with this block.
    Specified by:
      `setComment` in interface `MemoryBlock`
    Parameters:
      `comment` - the comment to associate with this block.

  - ### isRead

    public boolean isRead()
    Description copied from interface: `MemoryBlock`
    Returns the value of the read property associated with this block
    Specified by:
      `isRead` in interface `MemoryBlock`

  - ### setRead

    public void setRead(boolean r)
    Description copied from interface: `MemoryBlock`
    Sets the read property associated with this block.
    Specified by:
      `setRead` in interface `MemoryBlock`
    Parameters:
      `r` - the value to set the read property to.

  - ### isWrite

    public boolean isWrite()
    Description copied from interface: `MemoryBlock`
    Returns the value of the write property associated with this block
    Specified by:
      `isWrite` in interface `MemoryBlock`

  - ### setWrite

    public void setWrite(boolean w)
    Description copied from interface: `MemoryBlock`
    Sets the write property associated with this block.
    Specified by:
      `setWrite` in interface `MemoryBlock`
    Parameters:
      `w` - the value to set the write property to.

  - ### isExecute

    public boolean isExecute()
    Description copied from interface: `MemoryBlock`
    Returns the value of the execute property associated with this block
    Specified by:
      `isExecute` in interface `MemoryBlock`

  - ### setExecute

    public void setExecute(boolean x)
    Description copied from interface: `MemoryBlock`
    Sets the execute property associated with this block.
    Specified by:
      `setExecute` in interface `MemoryBlock`
    Parameters:
      `x` - the value to set the execute property to.

  - ### setPermissions

    public void setPermissions(boolean read, boolean write, boolean execute)
    Description copied from interface: `MemoryBlock`
    Sets the read, write, execute permissions on this block
    Specified by:
      `setPermissions` in interface `MemoryBlock`
    Parameters:
      `read` - the read permission
      `write` - the write permission
      `execute` - the execute permission

  - ### isVolatile

    public boolean isVolatile()
    Description copied from interface: `MemoryBlock`
    Returns the value of the volatile property associated with this block. This attribute is generally associated with block of I/O regions of memory.
    Specified by:
      `isVolatile` in interface `MemoryBlock`

  - ### setVolatile

    public void setVolatile(boolean v)
    Description copied from interface: `MemoryBlock`
    Sets the volatile property associated with this block.
    Specified by:
      `setVolatile` in interface `MemoryBlock`
    Parameters:
      `v` - the value to set the volatile property to.

  - ### getSourceName

    public String getSourceName()
    Description copied from interface: `MemoryBlock`
    Get the name of the source of this memory block.
    Specified by:
      `getSourceName` in interface `MemoryBlock`
    Returns:
      source name

  - ### setSourceName

    public void setSourceName(String sourceName)
    Description copied from interface: `MemoryBlock`
    Sets the name of the source file that provided the data.
    Specified by:
      `setSourceName` in interface `MemoryBlock`
    Parameters:
      `sourceName` - the name of the source file.

  - ### getByte

    public byte getByte(Address addr) throws MemoryAccessException
    Description copied from interface: `MemoryBlock`
    Returns the byte at the given address in this block.
    Specified by:
      `getByte` in interface `MemoryBlock`
    Parameters:
      `addr` - the address.
    Throws:
      `MemoryAccessException` - if any of the requested bytes are uninitialized.

  - ### getBytes

    public int getBytes(Address addr, byte[] b) throws MemoryAccessException
    Description copied from interface: `MemoryBlock`
    Tries to get b.length bytes from this block at the given address. May return fewer bytes if the requested length is beyond the end of the block.
    Specified by:
      `getBytes` in interface `MemoryBlock`
    Parameters:
      `addr` - the address from which to get the bytes.
      `b` - the byte array to populate.
    Returns:
      the number of bytes actually populated.
    Throws:
      `MemoryAccessException` - if any of the requested bytes are uninitialized.

  - ### getBytes

    public int getBytes(Address addr, byte[] b, int off, int len) throws IndexOutOfBoundsException, MemoryAccessException
    Description copied from interface: `MemoryBlock`
    Tries to get len bytes from this block at the given address and put them into the given byte array at the specified offet. May return fewer bytes if the requested length is beyond the end of the block.
    Specified by:
      `getBytes` in interface `MemoryBlock`
    Parameters:
      `addr` - the address from which to get the bytes.
      `b` - the byte array to populate.
      `off` - the offset into the byte array.
      `len` - the number of bytes to get.
    Returns:
      the number of bytes actually populated.
    Throws:
      `IndexOutOfBoundsException` - if invalid offset is specified
      `MemoryAccessException` - if any of the requested bytes are uninitialized.

  - ### putByte

    public void putByte(Address addr, byte b) throws MemoryAccessException
    Description copied from interface: `MemoryBlock`
    Puts the given byte at the given address in this block.
    Specified by:
      `putByte` in interface `MemoryBlock`
    Parameters:
      `addr` - the address.
    Throws:
      `MemoryAccessException` - if the block is uninitialized

  - ### putBytes

    public int putBytes(Address addr, byte[] b) throws MemoryAccessException
    Description copied from interface: `MemoryBlock`
    Tries to put b.length bytes from the specified byte array to this block. All the bytes may not be put if the requested length is beyond the end of the block.
    Specified by:
      `putBytes` in interface `MemoryBlock`
    Parameters:
      `addr` - the address of where to put the bytes.
      `b` - the byte array containing the bytes to write.
    Returns:
      the number of bytes actually written.
    Throws:
      `MemoryAccessException` - if the block is uninitialized

  - ### putBytes

    public int putBytes(Address addr, byte[] b, int off, int len) throws IndexOutOfBoundsException, MemoryAccessException
    Description copied from interface: `MemoryBlock`
    Tries to put len bytes from the specified byte array to this block. All the bytes may not be written if the requested length is beyond the end of the block.
    Specified by:
      `putBytes` in interface `MemoryBlock`
    Parameters:
      `addr` - the address of where to put the bytes.
      `b` - the byte array containing the bytes to write.
      `off` - the offset into the byte array.
      `len` - the number of bytes to write.
    Returns:
      the number of bytes actually written.
    Throws:
      `IndexOutOfBoundsException` - if invalid offset is specified
      `MemoryAccessException` - if the block is uninitialized

  - ### isInitialized

    public boolean isInitialized()
    Description copied from interface: `MemoryBlock`
    Return whether this block has been initialized.

    WARNING: A mapped memory block may have a mix of intialized, uninitialized, and undefined regions. The value returned by this method for a mapped memory block is always false even if some regions are initialized.

    Specified by:
      `isInitialized` in interface `MemoryBlock`
    Returns:
      true if block is fully initialized and not a memory-mapped-block, else false

  - ### isMapped

    public boolean isMapped()
    Description copied from interface: `MemoryBlock`
    Returns true if this is either a bit-mapped or byte-mapped block
    Specified by:
      `isMapped` in interface `MemoryBlock`
    Returns:
      true if this is either a bit-mapped or byte-mapped block

  - ### isLoaded

    public boolean isLoaded()
    Description copied from interface: `MemoryBlock`
    Returns true if this memory block is a real loaded block (i.e. RAM) and not a special block containing file header data such as debug sections.
    Specified by:
      `isLoaded` in interface `MemoryBlock`
    Returns:
      true if this is a loaded block and not a "special" block such as a file header.

  - ### getType

    public MemoryBlockType getType()
    Description copied from interface: `MemoryBlock`
    Get the type for this block: DEFAULT, BIT_MAPPED, or BYTE_MAPPED (see `MemoryBlockType`).
    Specified by:
      `getType` in interface `MemoryBlock`
    Returns:
      memory block type

  - ### isOverlay

    public boolean isOverlay()
    Description copied from interface: `MemoryBlock`
    Returns true if this is an overlay block (i.e., contained within overlay space).
    Specified by:
      `isOverlay` in interface `MemoryBlock`
    Returns:
      true if this is an overlay block

  - ### getByte

    public byte getByte(long offset) throws MemoryAccessException
    Throws:
      `MemoryAccessException`

  - ### getBytes

    public int getBytes(long offset, byte[] b, int off, int len) throws IndexOutOfBoundsException, MemoryAccessException
    Throws:
      `IndexOutOfBoundsException`
      `MemoryAccessException`

  - ### getBlockOffset

    protected long getBlockOffset(Address addr) throws MemoryAccessException
    Throws:
      `MemoryAccessException`

  - ### invalidate

    public void invalidate()

  - ### getSourceInfos

    public List<MemoryBlockSourceInfo> getSourceInfos()
    Description copied from interface: `MemoryBlock`
    Returns a list of `MemoryBlockSourceInfo` objects for this block. A block may consist of multiple sequences of bytes from different sources. Each such source of bytes is described by its respective SourceInfo object. Blocks may have multiple sources after two or more memory blocks have been joined together and the underlying byte sources can't be joined.
    Specified by:
      `getSourceInfos` in interface `MemoryBlock`
    Returns:
      a list of SourceInfo objects, one for each different source of bytes in this block.

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`