From 849504cda6f78a054e89418d32ed1089d1d9106d Mon Sep 17 00:00:00 2001 From: ghidra007 Date: Fri, 12 Feb 2021 18:48:37 +0000 Subject: [PATCH] GP-688 RTTI Util improved getVftableCount method to not just rely on pseudoDissasembler but also check if existing function. --- .../src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java b/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java index 4fd197d895..864953dbf8 100644 --- a/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java +++ b/Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java @@ -25,8 +25,7 @@ import ghidra.app.util.PseudoDisassembler; import ghidra.app.util.datatype.microsoft.MSDataTypeUtils; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSetView; -import ghidra.program.model.listing.GhidraClass; -import ghidra.program.model.listing.Program; +import ghidra.program.model.listing.*; import ghidra.program.model.mem.Memory; import ghidra.program.model.mem.MemoryBlock; import ghidra.program.model.symbol.*; @@ -166,7 +165,10 @@ public class RttiUtil { break; } - if (!pseudoDisassembler.isValidSubroutine(referencedAddress, true, false)) { + Function function = program.getFunctionManager().getFunctionAt(referencedAddress); + + if (function == null && + !pseudoDisassembler.isValidSubroutine(referencedAddress, true, false)) { break; // Not pointing to possible function. }