From 116b12badb9acfa5833e39d6dbb923f25bee8fef Mon Sep 17 00:00:00 2001 From: ArandomDev Date: Wed, 29 Dec 2021 13:26:01 -0500 Subject: [PATCH] Refixed relative objc methods issue in #3611. Added null check for ObjectiveC2_class. --- .../app/util/bin/format/objc2/ObjectiveC2_Class.java | 2 +- .../app/util/bin/format/objc2/ObjectiveC2_Method.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Class.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Class.java index 8890b16d1d..f51ef59801 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Class.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Class.java @@ -52,7 +52,7 @@ public class ObjectiveC2_Class implements StructConverter { AddressSpace space = _state.program.getAddressFactory().getDefaultAddressSpace(); Address addr = space.getAddress(_index); Symbol symbol = _state.program.getSymbolTable().getPrimarySymbol(addr); - if (symbol.getParentNamespace().getName().equals(SectionNames.SECT_GOT)) { + if (symbol != null && symbol.getParentNamespace().getName().equals(SectionNames.SECT_GOT)) { return; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Method.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Method.java index 11ec241f45..38ed8f3b66 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Method.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objc2/ObjectiveC2_Method.java @@ -37,9 +37,13 @@ public class ObjectiveC2_Method extends ObjectiveC_Method { if (isSmallList) { int nameOffset = (int)ObjectiveC1_Utilities.readNextIndex(reader, true); - int namePtr = reader.readInt(_index + nameOffset); - long imagebase = state.program.getImageBase().getOffset(); // When we support dyld_shared_cache, this base will likely have to change - name = reader.readAsciiString(imagebase + namePtr); + long namePtr; + if (state.is32bit) + namePtr = reader.readInt(_index + nameOffset); + else + namePtr = reader.readLong(_index + nameOffset); + + name = reader.readAsciiString(namePtr); int typesOffset = (int)ObjectiveC1_Utilities.readNextIndex(reader, true); types = reader.readAsciiString(_index + 4 + typesOffset);