Changed data structure that holds addresses from Set to List.

This commit is contained in:
ghidra2 2021-06-07 13:01:03 -04:00
parent a40e75da90
commit 18c8e5b8d6
3 changed files with 19 additions and 19 deletions

View file

@ -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<Address> addressSet = mem.locateAddressesForFileOffset(myFileOffset);
if (addressSet.isEmpty()) {
List<Address> 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());
}
}

View file

@ -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())

View file

@ -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<Address> locateAddressesForFileOffset(long fileOffset) {
Set<Address> set = new HashSet<>();
public default List<Address> locateAddressesForFileOffset(long fileOffset) {
List<Address> 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;
}
}