From 393afa858baedab1de49e9b630e736278e4d5d77 Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Mon, 15 Apr 2024 22:56:20 +0000 Subject: [PATCH] GP-0 fix golang's slice detection that was triggering on switch tables --- .../ghidra/app/util/bin/format/golang/rtti/GoSlice.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/rtti/GoSlice.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/rtti/GoSlice.java index 1b67f90bd0..d6b2512cc7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/rtti/GoSlice.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/golang/rtti/GoSlice.java @@ -25,6 +25,7 @@ import ghidra.app.util.bin.format.golang.rtti.types.GoSliceType; import ghidra.app.util.bin.format.golang.structmapping.*; import ghidra.program.model.address.*; import ghidra.program.model.data.*; +import ghidra.program.model.listing.Instruction; import ghidra.program.model.mem.Memory; import ghidra.util.Msg; import ghidra.util.exception.CancelledException; @@ -127,6 +128,12 @@ public class GoSlice implements StructureMarkup { try { Memory memory = programContext.getProgram().getMemory(); Address arrayAddr = getArrayAddress(); + Instruction arrayInstr = + programContext.getProgram().getListing().getInstructionAt(arrayAddr); + if (arrayInstr != null) { + // if slice array is pointing at an instruction (commonly in switch tables) + return false; + } return memory.contains(arrayAddr) && memory.contains(arrayAddr.addNoWrap(len * elementSize)); }