Interface Memory

    • Method Detail

      • getProgram

        Program getProgram()
        Returns the program that this memory belongs to.
      • getLoadedAndInitializedAddressSet

        AddressSetView getLoadedAndInitializedAddressSet()
        Returns the set of addresses which correspond to all the "loaded" memory blocks that have initialized data. This does not include initialized memory blocks that contain data from the program's file header such as debug sections.
      • getAllInitializedAddressSet

        AddressSetView getAllInitializedAddressSet()
        Returns the set of addresses which correspond to all memory blocks that have initialized data. This includes initialized memory blocks that contain data from the program's file header that are not actually in the running in memory image, such as debug sections. Use getLoadedAndInitializedAddressSet() if you only want the addressed of the loaded in memory blocks.
      • getExecuteSet

        AddressSetView getExecuteSet()
        Returns the set of addresses which correspond to the executable memory.
      • isBigEndian

        boolean isBigEndian()
        Returns true if the memory is bigEndian, false otherwise.
      • setLiveMemoryHandler

        void setLiveMemoryHandler​(LiveMemoryHandler handler)
        Sets the live memory handler
        Parameters:
        handler - the live memory handler
      • getLiveMemoryHandler

        LiveMemoryHandler getLiveMemoryHandler()
        Returns the live memory handler instance used by this memory.
        Returns:
        the live memory handler
      • createInitializedBlock

        MemoryBlock createInitializedBlock​(java.lang.String name,
                                           Address start,
                                           java.io.InputStream is,
                                           long length,
                                           TaskMonitor monitor,
                                           boolean overlay)
                                    throws LockException,
                                           MemoryConflictException,
                                           AddressOverflowException,
                                           CancelledException,
                                           DuplicateNameException
        Create an initialized memory block and add it to this Memory.
        Parameters:
        name - block name
        start - start address of the block
        is - source of the data used to fill the block or null for zero initialization.
        length - the size of the block
        monitor - task monitor
        overlay - if true, the block will be created as an OVERLAY which means that a new overlay address space will be created and the block will have a starting address at the same offset as the given start address parameter, but in the new address space.
        Returns:
        new Initialized Memory Block
        Throws:
        LockException - if exclusive lock not in place (see haveLock())
        MemoryConflictException - if the new block overlaps with a previous block
        AddressOverflowException - if the start is beyond the address space
        CancelledException - user cancelled operation
        DuplicateNameException - if overlay is true and there is already an overlay address space with the same name as this memory block
      • createInitializedBlock

        MemoryBlock createInitializedBlock​(java.lang.String name,
                                           Address start,
                                           long size,
                                           byte initialValue,
                                           TaskMonitor monitor,
                                           boolean overlay)
                                    throws LockException,
                                           DuplicateNameException,
                                           MemoryConflictException,
                                           AddressOverflowException,
                                           CancelledException
        Create an initialized memory block and add it to this Memory.
        Parameters:
        name - block name
        start - start of the block
        size - block length (positive non-zero value required)
        initialValue - initialization value for every byte in the block.
        monitor - progress monitor, may be null.
        overlay - if true, the block will be created as an OVERLAY which means that a new overlay address space will be created and the block will have a starting address at the same offset as the given start address paramaeter, but in the new address space.
        Returns:
        new Initialized Memory Block
        Throws:
        DuplicateNameException - if overlay is true and there is already an overlay address space with the same name as this memory block
        LockException - if exclusive lock not in place (see haveLock())
        MemoryConflictException - if the new block overlaps with a previous block
        AddressOverflowException - if the start is beyond the address space
        CancelledException - user cancelled operation
      • createInitializedBlock

        MemoryBlock createInitializedBlock​(java.lang.String name,
                                           Address start,
                                           FileBytes fileBytes,
                                           long offset,
                                           long size,
                                           boolean overlay)
                                    throws LockException,
                                           DuplicateNameException,
                                           MemoryConflictException,
                                           AddressOverflowException
        Create an initialized memory block using bytes from a FileBytes object.
        Parameters:
        name - block name
        start - starting address of the block
        fileBytes - the FileBytes object to use as the underlying source of bytes.
        offset - the offset into the FileBytes for the first byte of this memory block.
        size - block length (positive non-zero value required)
        overlay - if true, the block will be created as an OVERLAY which means that a new overlay address space will be created and the block will have a starting address at the same offset as the given start address parameter, but in the new address space.
        Returns:
        new Initialized Memory Block
        Throws:
        LockException - if exclusive lock not in place (see haveLock())
        DuplicateNameException - if overlay is true and there is already an overlay address space with the same name as this memory block
        MemoryConflictException - if the new block overlaps with a previous block
        AddressOverflowException - if the start is beyond the address space
        java.lang.IndexOutOfBoundsException - if file bytes range specified by offset and size is out of bounds for the specified fileBytes.
      • createUninitializedBlock

        MemoryBlock createUninitializedBlock​(java.lang.String name,
                                             Address start,
                                             long size,
                                             boolean overlay)
                                      throws LockException,
                                             DuplicateNameException,
                                             MemoryConflictException,
                                             AddressOverflowException
        Create an uninitialized memory block and add it to this Memory.
        Parameters:
        name - block name
        start - start of the block
        size - block length
        overlay - if true, the block will be created as an OVERLAY which means that a new overlay address space will be created and the block will have a starting address at the same offset as the given start address paramaeter, but in the new address space.
        Returns:
        new Uninitialized Memory Block
        Throws:
        LockException - if exclusive lock not in place (see haveLock())
        MemoryConflictException - if the new block overlaps with a previous block
        AddressOverflowException - if the start is beyond the address space
        DuplicateNameException - if overlay is true and there is already an overlay address space with the same name as this memory block
      • removeBlock

        void removeBlock​(MemoryBlock block,
                         TaskMonitor monitor)
                  throws LockException
        Remove the memory block.
        Parameters:
        block - the block to be removed.
        monitor - monitor that is used to cancel the remove operation
        Throws:
        LockException - if exclusive lock not in place (see haveLock())
      • getSize

        long getSize()
        Get the memory size in bytes.
      • getBlock

        MemoryBlock getBlock​(Address addr)
        Returns the Block which contains addr.
        Parameters:
        addr - a valid data Address.
        Returns:
        the block containing addr; null if addr is not a valid location.
        Throws:
        AddressTypeException - if the addr is not the proper type of Address for this Memory.
      • getBlock

        MemoryBlock getBlock​(java.lang.String blockName)
        Returns the Block with the specified blockName
        Parameters:
        blockName - the name of the requested block
        Returns:
        the Block with the specified blockName
      • getBlocks

        MemoryBlock[] getBlocks()
        Returns an array containing all the memory blocks.
      • findBytes

        Address findBytes​(Address addr,
                          byte[] bytes,
                          byte[] masks,
                          boolean forward,
                          TaskMonitor monitor)
        Finds a sequence of contiguous bytes that match the given byte array at all bit positions where the mask contains an "on" bit.
        Parameters:
        addr - The beginning address in memory to search.
        bytes - the array of bytes to search for.
        masks - the array of masks. (One for each byte in the byte array) if all bits of each byte is to be checked (ie: all mask bytes are 0xff), then pass a null for masks.
        forward - if true, search in the forward direction.
        Returns:
        The address of where the first match is found. Null is returned if there is no match.
      • findBytes

        Address findBytes​(Address startAddr,
                          Address endAddr,
                          byte[] bytes,
                          byte[] masks,
                          boolean forward,
                          TaskMonitor monitor)
        Finds a sequence of contiguous bytes that match the given byte array at all bit positions where the mask contains an "on" bit. Starts at startAddr and ends at endAddr. If forward is true, search starts at startAddr and will end if startAddr ">" endAddr. If forward is false, search starts at start addr and will end if startAddr "<" endAddr.
        Parameters:
        startAddr - The beginning address in memory to search.
        endAddr - The ending address in memory to search (inclusive).
        bytes - the array of bytes to search for.
        masks - the array of masks. (One for each byte in the byte array) if all bits of each byte is to be checked (ie: all mask bytes are 0xff), then pass a null for masks.
        forward - if true, search in the forward direction.
        Returns:
        The address of where the first match is found. Null is returned if there is no match.
      • getBytes

        int getBytes​(Address addr,
                     byte[] dest)
              throws MemoryAccessException
        Get dest.length number of bytes starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the byte array to populate.
        Returns:
        the number of bytes put into dest. May be less than dest.length if the requested number extends beyond available memory.
        Throws:
        MemoryAccessException - if the starting address is not contained in any memory block.
      • getBytes

        int getBytes​(Address addr,
                     byte[] dest,
                     int destIndex,
                     int size)
              throws MemoryAccessException
        Get size number of bytes starting at the given address and populates dest starting at dIndex.
        Parameters:
        addr - the starting Address.
        dest - the byte array to populate.
        destIndex - the offset into dest to place the bytes.
        size - the number of bytes to get.
        Returns:
        the number of bytes put into dest. May be less than size if the requested number extends beyond available memory.
        Throws:
        MemoryAccessException - if the starting address is not contained in any memory block.
      • getShort

        short getShort​(Address addr)
                throws MemoryAccessException
        Get the short at addr.
        Parameters:
        addr - the Address where the short starts.
        Returns:
        the short.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getShort

        short getShort​(Address addr,
                       boolean bigEndian)
                throws MemoryAccessException
        Get the short at addr using the specified endian order.
        Parameters:
        addr - the Address where the short starts.
        bigEndian - true means to get the short in bigEndian order
        Returns:
        the short.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getShorts

        int getShorts​(Address addr,
                      short[] dest)
               throws MemoryAccessException
        Get dest.length number of shorts starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the short array to populate.
        Returns:
        the number of shorts put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is odd, the final byte will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getShorts

        int getShorts​(Address addr,
                      short[] dest,
                      int dIndex,
                      int nElem)
               throws MemoryAccessException
        Get dest.length number of shorts starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the short array to populate.
        dIndex - the offset into dest to place the shorts.
        size - the number of shorts to get.
        Returns:
        the number of shorts put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is odd, the final byte will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getShorts

        int getShorts​(Address addr,
                      short[] dest,
                      int dIndex,
                      int nElem,
                      boolean isBigEndian)
               throws MemoryAccessException
        Get dest.length number of shorts starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the short array to populate.
        dIndex - the offset into dest to place the shorts.
        size - the number of shorts to get.
        isBigEndian - true means to get the shorts in bigEndian order
        Returns:
        the number of shorts put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is odd, the final byte will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getInt

        int getInt​(Address addr)
            throws MemoryAccessException
        Get the int at addr.
        Parameters:
        addr - the Address where the int starts.
        Returns:
        the int.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getInt

        int getInt​(Address addr,
                   boolean bigEndian)
            throws MemoryAccessException
        Get the int at addr using the specified endian order.
        Parameters:
        addr - the Address where the int starts.
        bigEndian - true means to get the int in big endian order
        Returns:
        the int.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getInts

        int getInts​(Address addr,
                    int[] dest)
             throws MemoryAccessException
        Get dest.length number of ints starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the int array to populate.
        Returns:
        the number of ints put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is not 0 mod 4, the final byte(s) will be discarded.
        Throws:
        MemoryAccessException - if the starting address is not contained in any memory block.
      • getInts

        int getInts​(Address addr,
                    int[] dest,
                    int dIndex,
                    int nElem)
             throws MemoryAccessException
        Get dest.length number of ints starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the int array to populate.
        dIndex - the offset into dest to place the ints.
        size - the number of ints to get.
        Returns:
        the number of ints put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is not 0 mod 4, the final byte(s) will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getInts

        int getInts​(Address addr,
                    int[] dest,
                    int dIndex,
                    int nElem,
                    boolean isBigEndian)
             throws MemoryAccessException
        Get dest.length number of ints starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the int array to populate.
        dIndex - the offset into dest to place the ints.
        size - the number of ints to get.
        isBigEndian - true means to get the ints in bigEndian order
        Returns:
        the number of ints put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is not 0 mod 4, the final byte(s) will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getLong

        long getLong​(Address addr)
              throws MemoryAccessException
        Get the long at addr.
        Parameters:
        addr - the Address where the long starts.
        Returns:
        the long.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getLong

        long getLong​(Address addr,
                     boolean bigEndian)
              throws MemoryAccessException
        Get the long at addr in the specified endian order.
        Parameters:
        addr - the Address where the long starts.
        bigEndian - true means to get the long in big endian order
        Returns:
        the long.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getLongs

        int getLongs​(Address addr,
                     long[] dest)
              throws MemoryAccessException
        Get dest.length number of longs starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the long array to populate.
        Returns:
        the number of longs put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is not 0 mod 8, the final byte(s) will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getLongs

        int getLongs​(Address addr,
                     long[] dest,
                     int dIndex,
                     int nElem)
              throws MemoryAccessException
        Get dest.length number of longs starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the long array to populate.
        dIndex - the offset into dest to place the longs.
        size - the number of longs to get.
        Returns:
        the number of longs put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is not 0 mod 8, the final byte(s) will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • getLongs

        int getLongs​(Address addr,
                     long[] dest,
                     int dIndex,
                     int nElem,
                     boolean isBigEndian)
              throws MemoryAccessException
        Get dest.length number of longs starting at the given address.
        Parameters:
        addr - the starting Address.
        dest - the long array to populate.
        dIndex - the offset into dest to place the longs.
        size - the number of longs to get.
        isBigEndian - true means to get the longs in bigEndian order
        Returns:
        the number of longs put into dest. May be less than dest.length if the requested number extends beyond available memory. If the number of retrievable bytes is not 0 mod 8, the final byte(s) will be discarded.
        Throws:
        MemoryAccessException - if not all needed bytes are contained in initialized memory.
      • setBytes

        void setBytes​(Address addr,
                      byte[] source)
               throws MemoryAccessException
        Write size bytes from values at addr.
        Parameters:
        addr - the starting Address.
        source - the bytes to write.
        Throws:
        MemoryAccessException - if writing is not allowed.
      • setBytes

        void setBytes​(Address addr,
                      byte[] source,
                      int sIndex,
                      int size)
               throws MemoryAccessException
        Write an array of bytes. This should copy size bytes or fail!
        Parameters:
        addr - the starting Address of the bytes.
        source - an array to get bytes from.
        sIndex - the starting source index.
        size - the number of bytes to fill.
        Throws:
        MemoryAccessException - if writing is not allowed.
      • setShort

        void setShort​(Address addr,
                      short value)
               throws MemoryAccessException
        Write short at addr in big endian order.
        Parameters:
        addr - the Address of the short.
        value - the data to write.
        Throws:
        MemoryAccessException - if writing is not allowed.
      • setShort

        void setShort​(Address addr,
                      short value,
                      boolean bigEndian)
               throws MemoryAccessException
        Write short at addr in the specified endian order.
        Parameters:
        addr - the Address of the short.
        value - the data to write.
        bigEndian - true means to write short in big endian order
        Throws:
        MemoryAccessException - if writing is not allowed.
      • setInt

        void setInt​(Address addr,
                    int value,
                    boolean bigEndian)
             throws MemoryAccessException
        Write int at addr in the specified endian order.
        Parameters:
        addr - the Address of the int.
        bigEndian - true means to write the short in bigEndian order
        value - the data to write.
        Throws:
        MemoryAccessException - if writing is not allowed.
      • setLong

        void setLong​(Address addr,
                     long value,
                     boolean bigEndian)
              throws MemoryAccessException
        Write long at addr in the specified endian order.
        Parameters:
        addr - the Address of the long.
        value - the data to write.
        bigEndian - true means to write the long in bigEndian order
        Throws:
        MemoryAccessException - if writing is not allowed.
      • createFileBytes

        FileBytes createFileBytes​(java.lang.String filename,
                                  long offset,
                                  long size,
                                  java.io.InputStream is,
                                  TaskMonitor monitor)
                           throws java.io.IOException,
                                  CancelledException
        Stores a sequence of bytes into the program. Typically, this method is used by importers to store the original raw program bytes.
        Parameters:
        filename - the name of the file from where the bytes originated
        offset - the offset into the file for the first byte in the input stream.
        size - the number of bytes to store from the input stream.
        is - the input stream that will supply the bytes to store in the program.
        monitor -
        Returns:
        a FileBytes that was created to access the bytes.
        Throws:
        java.io.IOException - if there was an IOException saving the bytes to the program database.
        CancelledException - if the user cancelled this operation. Note: the database will be stable, but the buffers may contain 0s instead of the actual bytes.
      • getAllFileBytes

        java.util.List<FileBytes> getAllFileBytes()
        Returns a list of all the stored original file bytes objects
        Returns:
        a list of all the stored original file bytes objects
      • deleteFileBytes

        boolean deleteFileBytes​(FileBytes fileBytes)
                         throws java.io.IOException
        Deletes a stored sequence of file bytes. The file bytes can only be deleted if there are no memory block references to the file bytes.
        Parameters:
        fileBytes - the FileBytes for the file bytes to be deleted.
        Returns:
        true if the FileBytes was deleted. If any memory blocks are referenced by this FileBytes or it is invalid then it will not be deleted and false will be returned.
        Throws:
        java.io.IOException - if there was an error updating the database.
      • getAddressSourceInfo

        AddressSourceInfo getAddressSourceInfo​(Address address)
        Returns information (AddressSourceInfo) about the byte source at the given address.
        Parameters:
        address - the address to query. Returns null if the address is not in memory.
        Returns:
        information (AddressSourceInfo) about the byte source at the given address or null if the address is not in memory.