Interface Memory

    • Field Detail

      • MAX_BINARY_SIZE_GB

        static final int MAX_BINARY_SIZE_GB
        Maximum size of all memory blocks, 16-GByte (see getAllInitializedAddressSet()). This restriction is somewhat arbitrary but is established to prevent an excessive number of memory map segments which can have a negative impact on performance.
        See Also:
        Constant Field Values
      • MAX_INITIALIZED_BLOCK_SIZE_GB

        static final int MAX_INITIALIZED_BLOCK_SIZE_GB
        Initialized blocks must be addressable by an int, 1-GByte. This value has been established due to limitations of the ChainedBuffer implementation use positive integers to convey length.
        See Also:
        Constant Field Values
      • MAX_INITIALIZED_BLOCK_SIZE

        static final long MAX_INITIALIZED_BLOCK_SIZE
        See Also:
        Constant Field Values
      • MAX_UNINITIALIZED_BLOCK_SIZE_GB

        static final int MAX_UNINITIALIZED_BLOCK_SIZE_GB
        Uninitialized blocks size limit, 12-GByte (limit number of 32-bit segments). This restriction is somewhat arbitrary but is established to prevent an excessive number of memory map segments (MAX_BINARY_SIZE_GB).
        See Also:
        Constant Field Values
      • MAX_UNINITIALIZED_BLOCK_SIZE

        static final long MAX_UNINITIALIZED_BLOCK_SIZE
        See Also:
        Constant Field Values
    • 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
      • 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.