mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-07-30 07:18:37 -09:00
GP-7026 Improved PointerDataType.getAddressValue error checking
This commit is contained in:
@@ -415,6 +415,7 @@ public class PointerDataType extends BuiltIn implements Pointer {
|
||||
AddressSpace targetSpace = null;
|
||||
|
||||
Memory mem = buf.getMemory();
|
||||
Program program = mem != null ? mem.getProgram() : null;
|
||||
|
||||
boolean signedOffset = false;
|
||||
PointerType pointerType = PointerTypeSettingsDefinition.DEF.getType(settings);
|
||||
@@ -463,11 +464,13 @@ public class PointerDataType extends BuiltIn implements Pointer {
|
||||
// A 0 relative offset is considered invalid (NaP)
|
||||
return null; // NaP without error
|
||||
}
|
||||
if (mem == null) {
|
||||
errorHandler.accept("Memory not specified");
|
||||
if (program == null) {
|
||||
errorHandler
|
||||
.accept("Unable to compute IBO address - Program memory not specified");
|
||||
return null;
|
||||
}
|
||||
// must ignore AddressSpaceSettingsDefinition
|
||||
Address imageBase = mem.getProgram().getImageBase();
|
||||
Address imageBase = program.getImageBase();
|
||||
targetSpace = imageBase.getAddressSpace();
|
||||
return imageBase.addWrap(addrOffset * targetSpace.getAddressableUnitSize());
|
||||
}
|
||||
@@ -483,10 +486,10 @@ public class PointerDataType extends BuiltIn implements Pointer {
|
||||
}
|
||||
else if (pointerType == PointerType.FILE_OFFSET) {
|
||||
if (mem == null) {
|
||||
errorHandler.accept("Memory not specified");
|
||||
errorHandler.accept("File offset lookup failed - Memory not specified");
|
||||
}
|
||||
else if (mem.getAllFileBytes().size() == 0) {
|
||||
errorHandler.accept("No File bytes used");
|
||||
errorHandler.accept("File offset lookup failed - No File bytes used");
|
||||
}
|
||||
else {
|
||||
List<Address> addressList = mem.locateAddressesForFileOffset(addrOffset);
|
||||
@@ -510,19 +513,21 @@ public class PointerDataType extends BuiltIn implements Pointer {
|
||||
}
|
||||
|
||||
if (spaceName != null) {
|
||||
if (mem == null) {
|
||||
errorHandler.accept("Memory not specified");
|
||||
// Address space was specified by a setting
|
||||
if (program == null) {
|
||||
errorHandler
|
||||
.accept("Address space lookup failed - Program memory not specified");
|
||||
return null;
|
||||
}
|
||||
Program program = mem.getProgram();
|
||||
targetSpace = program.getAddressFactory().getAddressSpace(spaceName);
|
||||
if (targetSpace == null) {
|
||||
errorHandler.accept(
|
||||
"Address space not defined: " + spaceName + ":" + formatOffset(addrOffset));
|
||||
return null;
|
||||
}
|
||||
if (targetSpace.isNonLoadedMemorySpace()) {
|
||||
errorHandler.accept("Address space is non-loaded: " + spaceName + ":" +
|
||||
if (!targetSpace.isLoadedMemorySpace()) {
|
||||
errorHandler
|
||||
.accept("Address space is not loaded memory space: " + spaceName + ":" +
|
||||
formatOffset(addrOffset));
|
||||
return null;
|
||||
}
|
||||
@@ -533,10 +538,10 @@ public class PointerDataType extends BuiltIn implements Pointer {
|
||||
if (targetSpace.isRegisterSpace()) {
|
||||
Language language = buf.getLanguage();
|
||||
if (language == null) {
|
||||
errorHandler.accept("Language not specified");
|
||||
errorHandler.accept("Unable to identify default Address space");
|
||||
return null;
|
||||
}
|
||||
targetSpace = language.getDefaultDataSpace();
|
||||
targetSpace = language.getDefaultSpace();
|
||||
}
|
||||
|
||||
if (targetSpace instanceof SegmentedAddressSpace) {
|
||||
|
||||
Reference in New Issue
Block a user