mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
GP-1142: better logic for 64-bit
This commit is contained in:
parent
91fa4d12c9
commit
51de35330c
1 changed files with 26 additions and 6 deletions
|
@ -65,17 +65,37 @@ public class GdbModelTargetProcessMemory
|
||||||
protected void updateUsingMappings(Map<BigInteger, GdbMemoryMapping> byStart) {
|
protected void updateUsingMappings(Map<BigInteger, GdbMemoryMapping> byStart) {
|
||||||
List<GdbModelTargetMemoryRegion> regions;
|
List<GdbModelTargetMemoryRegion> regions;
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (byStart.isEmpty()) {
|
regions =
|
||||||
|
byStart.values().stream().map(this::getTargetRegion).collect(Collectors.toList());
|
||||||
|
if (regions.isEmpty()) {
|
||||||
|
Map<BigInteger, GdbMemoryMapping> defaultMap =
|
||||||
|
new HashMap<BigInteger, GdbMemoryMapping>();
|
||||||
AddressSet addressSet = impl.getAddressFactory().getAddressSet();
|
AddressSet addressSet = impl.getAddressFactory().getAddressSet();
|
||||||
BigInteger start = addressSet.getMinAddress().getOffsetAsBigInteger();
|
BigInteger start = addressSet.getMinAddress().getOffsetAsBigInteger();
|
||||||
BigInteger end = addressSet.getMaxAddress().getOffsetAsBigInteger();
|
BigInteger end = addressSet.getMaxAddress().getOffsetAsBigInteger();
|
||||||
GdbMemoryMapping mem = new GdbMemoryMapping(start, end,
|
if (end.longValue() < 0) {
|
||||||
end.subtract(start), start.subtract(start), "default");
|
BigInteger split = BigInteger.valueOf(Long.MAX_VALUE);
|
||||||
byStart.put(start, mem);
|
GdbMemoryMapping lmem = new GdbMemoryMapping(start, split,
|
||||||
|
split.subtract(start), start.subtract(start), "defaultLow");
|
||||||
|
defaultMap.put(start, lmem);
|
||||||
|
split = split.add(BigInteger.valueOf(1));
|
||||||
|
GdbMemoryMapping hmem = new GdbMemoryMapping(split, end,
|
||||||
|
end.subtract(split), split.subtract(split), "defaultHigh");
|
||||||
|
defaultMap.put(split, hmem);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GdbMemoryMapping mem = new GdbMemoryMapping(start, end,
|
||||||
|
end.subtract(start), start.subtract(start), "default");
|
||||||
|
defaultMap.put(start, mem);
|
||||||
|
}
|
||||||
|
regions =
|
||||||
|
defaultMap.values()
|
||||||
|
.stream()
|
||||||
|
.map(this::getTargetRegion)
|
||||||
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
regions =
|
|
||||||
byStart.values().stream().map(this::getTargetRegion).collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setElements(regions, "Refreshed");
|
setElements(regions, "Refreshed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue