From d7ed3a1d35e9e958ea970f64acf6a7454ac9c2d8 Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Wed, 5 Feb 2025 21:36:44 +0000 Subject: [PATCH] GP-0 fix DWARF NPEs when missing regmapping info --- .../ghidra/app/util/bin/format/dwarf/DWARFVariable.java | 6 ++++-- .../funcfixup/StorageVerificationDWARFFunctionFixup.java | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFVariable.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFVariable.java index fe132c8561..0e473d807a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFVariable.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFVariable.java @@ -373,8 +373,10 @@ public class DWARFVariable { return false; } - type = prog.getDwarfDTM().getPtrTo(type); - setRegisterStorage(List.of(exprEvaluator.getLastRegister())); + if (exprEvaluator.getLastRegister() != null) { + type = prog.getDwarfDTM().getPtrTo(type); + setRegisterStorage(List.of(exprEvaluator.getLastRegister())); + } } else if (exprEvaluator.isStackRelative()) { if (exprEvaluator.isDeref()) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/funcfixup/StorageVerificationDWARFFunctionFixup.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/funcfixup/StorageVerificationDWARFFunctionFixup.java index ec281168fc..0aec2e4fdf 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/funcfixup/StorageVerificationDWARFFunctionFixup.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/funcfixup/StorageVerificationDWARFFunctionFixup.java @@ -15,9 +15,8 @@ */ package ghidra.app.util.bin.format.dwarf.funcfixup; -import ghidra.app.util.bin.format.dwarf.DWARFFunction; +import ghidra.app.util.bin.format.dwarf.*; import ghidra.app.util.bin.format.dwarf.DWARFFunction.CommitMode; -import ghidra.app.util.bin.format.dwarf.DWARFVariable; import ghidra.util.classfinder.ExtensionPointProperties; /** @@ -32,10 +31,11 @@ public class StorageVerificationDWARFFunctionFixup implements DWARFFunctionFixup @Override public void fixupDWARFFunction(DWARFFunction dfunc) { + DWARFRegisterMappings regMappings = dfunc.getProgram().getRegisterMappings(); boolean ignoreStorage = dfunc.getProgram().getImportOptions().isIgnoreParamStorage() || - dfunc.getProgram().getRegisterMappings().isUseFormalParameterStorage(); + (regMappings != null && regMappings.isUseFormalParameterStorage()); boolean isEmptySignature = dfunc.params.isEmpty() && dfunc.retval.isVoidType(); - if (ignoreStorage || isEmptySignature) { + if (regMappings == null || ignoreStorage || isEmptySignature) { dfunc.signatureCommitMode = CommitMode.FORMAL; return; }