From 18c8e5b8d658700304187b16ea73e64dcdfb8697 Mon Sep 17 00:00:00 2001 From: ghidra2 <48490442+ghidra2@users.noreply.github.com> Date: Mon, 7 Jun 2021 13:01:03 -0400 Subject: [PATCH] Changed data structure that holds addresses from Set to List. --- .../LocateMemoryAddressesForFileOffset.java | 12 ++++++------ .../LocateMemoryAddressesForFileOffset.py | 10 +++++----- .../java/ghidra/program/model/mem/Memory.java | 16 ++++++++-------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.java b/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.java index c31f620a3f..9e7114f954 100644 --- a/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.java +++ b/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.java @@ -22,7 +22,7 @@ //Ghidra comment) //@category Examples -import java.util.Set; +import java.util.List; import ghidra.app.script.GhidraScript; import ghidra.program.model.address.Address; @@ -36,12 +36,12 @@ public class LocateMemoryAddressesForFileOffset extends GhidraScript { public void run() throws Exception { long myFileOffset = getFileOffset(); Memory mem = currentProgram.getMemory(); - Set
addressSet = mem.locateAddressesForFileOffset(myFileOffset); - if (addressSet.isEmpty()) { + List
addressList = mem.locateAddressesForFileOffset(myFileOffset); + if (addressList.isEmpty()) { println("No memory address found for: " + Long.toHexString(myFileOffset)); } - else if (addressSet.size() == 1) { - Address address = addressSet.iterator().next(); + else if (addressList.size() == 1) { + Address address = addressList.get(0); processAddress(address, mem.getBlock(address).getName(), myFileOffset); } @@ -49,7 +49,7 @@ public class LocateMemoryAddressesForFileOffset extends GhidraScript { //Let the user decide which address they want. else { println("Possible memory block:address are:"); - for (Address addr : addressSet) { + for (Address addr : addressList) { println(mem.getBlock(addr).getName() + ":" + addr.toString()); } } diff --git a/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.py b/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.py index 716cd8041e..74cfec9e2d 100644 --- a/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.py +++ b/Ghidra/Features/Base/ghidra_scripts/LocateMemoryAddressesForFileOffset.py @@ -51,14 +51,14 @@ def processAddress(addr, memBlockName, fileOffset): myFileOffset = getFileOffset() mem = currentProgram.getMemory() -addressSet = mem.locateAddressesForFileOffset(myFileOffset) -if addressSet.isEmpty(): +addressList = mem.locateAddressesForFileOffset(myFileOffset) +if addressList.isEmpty(): println('No memory address found for: ' + hex(myFileOffset)) -elif addressSet.size() == 1: - address = addressSet.iterator().next() +elif addressList.size() == 1: + address = addressList.get(0) processAddress(address, mem.getBlock(address).getName(), myFileOffset) #file offset matches to multiple addresses. Let the user decide which address they want. else: println('Possible memory block:address are:') - for addr in addressSet: + for addr in addressList: println(mem.getBlock(addr).getName() + ":" + addr.toString()) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/mem/Memory.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/mem/Memory.java index e3ed84ab4f..3853cbda04 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/mem/Memory.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/mem/Memory.java @@ -17,7 +17,8 @@ package ghidra.program.model.mem; import java.io.IOException; import java.io.InputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import ghidra.framework.store.LockException; import ghidra.program.database.mem.*; @@ -829,22 +830,21 @@ public interface Memory extends AddressSetView { } /** - * Gets a {@link Set} of {@link Address addresses} that correspond to the given file offset. - * + * Gets a {@link List} of {@link Address addresses} that correspond to the given file offset. * @param fileOffset the file offset that will be used to locate the corresponding memory * addresses - * @return a {@link Set} of {@link Address}es that are associated with the provided file offset + * @return a {@link List} of {@link Address}es that are associated with the provided file offset */ - public default Set
locateAddressesForFileOffset(long fileOffset) { - Set
set = new HashSet<>(); + public default List
locateAddressesForFileOffset(long fileOffset) { + List
list = new ArrayList<>(); for (MemoryBlock memBlock : getBlocks()) { for (MemoryBlockSourceInfo info : memBlock.getSourceInfos()) { Address addr = info.locateAddressForFileOffset(fileOffset); if (addr != null) { - set.add(addr); + list.add(addr); } } } - return set; + return list; } }