diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java index 2cd033f826..34d35c9300 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java @@ -688,23 +688,26 @@ public class MemoryBlockDB implements MemoryBlock { } ByteSourceRangeList getByteSourceRangeList(Address address, long size) { - long offset = address.subtract(startAddress); - size = Math.min(size, length - offset); + long blockOffset = address.subtract(startAddress); + size = Math.min(size, length - blockOffset); - SubMemoryBlock subBlock = getSubBlock(offset); - long subSize = Math.min(size, subBlock.subBlockLength - (offset - subBlock.getStartingOffset())); + SubMemoryBlock subBlock = getSubBlock(blockOffset); + long subBlockOffset = blockOffset - subBlock.getStartingOffset(); + long available = subBlock.subBlockLength - subBlockOffset; + long subSize = Math.min(size, available); if (subSize == size) { - return subBlock.getByteSourceRangeList(this, address, offset, size); + return subBlock.getByteSourceRangeList(this, address, blockOffset, size); } Address start = address; - ByteSourceRangeList set = subBlock.getByteSourceRangeList(this, start, offset, subSize); + ByteSourceRangeList set = + subBlock.getByteSourceRangeList(this, start, blockOffset, subSize); long total = subSize; while (total < size) { - subBlock = getSubBlock(offset + total); + subBlock = getSubBlock(blockOffset + total); subSize = Math.min(size - total, subBlock.subBlockLength); start = address.add(total); - set.add(subBlock.getByteSourceRangeList(this, start, offset + total, subSize)); + set.add(subBlock.getByteSourceRangeList(this, start, blockOffset + total, subSize)); total += subSize; } return set; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/SubMemoryBlock.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/SubMemoryBlock.java index e133fe246a..03aae05b7d 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/SubMemoryBlock.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/SubMemoryBlock.java @@ -80,7 +80,8 @@ abstract class SubMemoryBlock implements Comparable { * @return true if the offset is valid for this block */ public final boolean contains(long memBlockOffset) { - return memBlockOffset >= subBlockOffset && memBlockOffset < subBlockOffset + subBlockLength; + return (memBlockOffset >= subBlockOffset) && + (memBlockOffset < subBlockOffset + subBlockLength); } /**