From 6e59716a50a5639e8a876197606f28ac1d72c4ec Mon Sep 17 00:00:00 2001 From: ghidravore Date: Thu, 1 Aug 2019 13:12:28 -0400 Subject: [PATCH] fixed bug in intel hex importer --- .../main/java/ghidra/app/util/MemoryBlockUtils.java | 2 +- .../java/ghidra/app/util/opinion/IntelHexMemImage.java | 2 +- .../ghidra/app/util/opinion/MotorolaHexLoader.java | 5 ++--- .../ghidra/program/database/mem/MemoryBlockDB.java | 6 +++++- .../java/ghidra/program/database/mem/MemoryMapDB.java | 10 +++++++++- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java index e6bc345c8c..09916a64cd 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/MemoryBlockUtils.java @@ -295,7 +295,7 @@ public class MemoryBlockUtils { } setBlockAttributes(block, comment, source, r, w, x); - adjustFragment(program, block.getStart(), name); + adjustFragment(program, block.getStart(), block.getName()); return block; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/IntelHexMemImage.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/IntelHexMemImage.java index e865a81e2f..743cdb8225 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/IntelHexMemImage.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/IntelHexMemImage.java @@ -211,7 +211,7 @@ class IntelHexMemImage { myRangeMap.remove(range); } - String name = blockName; + String name = blockName == null ? base.getAddressSpace().getName() : blockName; while (true) { try { MemoryBlockUtils.createInitializedBlock(program, isOverlay, name, diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MotorolaHexLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MotorolaHexLoader.java index 061a671c3b..274efa6fd4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MotorolaHexLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MotorolaHexLoader.java @@ -331,11 +331,10 @@ public class MotorolaHexLoader extends AbstractProgramLoader { byte[] data = new byte[offset]; System.arraycopy(dataBuffer, 0, data, 0, offset); - String name = baseAddr.getAddressSpace().getName(); - Address start = baseAddr.add(startAddress); - name = blockName; + String name = + blockName == null ? baseAddr.getAddressSpace().getName() : blockName; int count = 0; while (true) { try { 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 bd0a8d82e4..a0580737a3 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 @@ -116,7 +116,11 @@ public class MemoryBlockDB implements MemoryBlock { @Override public String getName() { - return record.getString(MemoryMapDBAdapter.NAME_COL); + String name = record.getString(MemoryMapDBAdapter.NAME_COL); + if (name == null) { + name = ""; + } + return name; } @Override diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java index 85e4e51a56..587ee3e00d 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java @@ -471,7 +471,7 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener { public MemoryBlock createInitializedBlock(String name, Address start, InputStream is, long length, TaskMonitor monitor, boolean overlay) throws MemoryConflictException, AddressOverflowException, CancelledException, LockException, DuplicateNameException { - + Objects.requireNonNull(name); lock.acquire(); try { checkBlockSize(length, true); @@ -513,6 +513,7 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener { long offset, long length, boolean overlay) throws LockException, DuplicateNameException, MemoryConflictException, AddressOverflowException { + Objects.requireNonNull(name); lock.acquire(); try { checkBlockSize(length, true); @@ -565,6 +566,7 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener { boolean overlay) throws MemoryConflictException, AddressOverflowException, LockException, DuplicateNameException { + Objects.requireNonNull(name); lock.acquire(); try { checkBlockSize(size, false); @@ -598,6 +600,8 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener { @Override public MemoryBlock createBitMappedBlock(String name, Address start, Address overlayAddress, long length) throws MemoryConflictException, AddressOverflowException, LockException { + + Objects.requireNonNull(name); lock.acquire(); try { checkBlockSize(length, false); @@ -625,6 +629,8 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener { @Override public MemoryBlock createByteMappedBlock(String name, Address start, Address overlayAddress, long length) throws MemoryConflictException, AddressOverflowException, LockException { + + Objects.requireNonNull(name); lock.acquire(); try { checkBlockSize(length, false); @@ -653,6 +659,8 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener { @Override public MemoryBlock createBlock(MemoryBlock block, String name, Address start, long length) throws MemoryConflictException, AddressOverflowException, LockException { + + Objects.requireNonNull(name); lock.acquire(); try { checkBlockSize(length, block.isInitialized());