From c38f2022a0cd1c512851765bf27d9fbb6249b439 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Wed, 27 Apr 2022 09:19:46 -0400 Subject: [PATCH] GP-1963 handle default pointer replacement --- .../FixElfExternalOffsetDataRelocationScript.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Ghidra/Features/Base/ghidra_scripts/FixElfExternalOffsetDataRelocationScript.java b/Ghidra/Features/Base/ghidra_scripts/FixElfExternalOffsetDataRelocationScript.java index 3f198e7e8c..88d68edb88 100644 --- a/Ghidra/Features/Base/ghidra_scripts/FixElfExternalOffsetDataRelocationScript.java +++ b/Ghidra/Features/Base/ghidra_scripts/FixElfExternalOffsetDataRelocationScript.java @@ -129,7 +129,8 @@ public class FixElfExternalOffsetDataRelocationScript extends GhidraScript { } DataType dt = data.getDataType(); - boolean isDefaultTypeApplied = Undefined.isUndefined(dt); + boolean isDefaultTypeApplied = address.equals(data.getAddress()) && + (Undefined.isUndefined(dt) || isDefaultPointer(dt)); int componentOffset = (int) address.subtract(data.getAddress()); if (!isDefaultTypeApplied && !canFixupStructure(dt, componentOffset, address.getPointerSize())) { @@ -175,6 +176,14 @@ public class FixElfExternalOffsetDataRelocationScript extends GhidraScript { return true; } + private boolean isDefaultPointer(DataType dt) { + if (dt instanceof Pointer) { + DataType refDt = ((Pointer) dt).getDataType(); + return refDt == null || refDt == DataType.DEFAULT; + } + return false; + } + private boolean canFixupStructure(DataType dt, int componentOffset, int pointerLength) { if (!(dt instanceof Structure)) { return false;