From f719d1d5565f7b7b1237b8e183c2985f006fa3e4 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Sat, 1 Mar 2025 00:34:12 -0500 Subject: Refactor and fixup MSVC and Itanium RTTI Bunch of misc fixes and performance improvements --- plugins/rtti/microsoft.h | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'plugins/rtti/microsoft.h') diff --git a/plugins/rtti/microsoft.h b/plugins/rtti/microsoft.h index b67431ec..b92bf7f3 100644 --- a/plugins/rtti/microsoft.h +++ b/plugins/rtti/microsoft.h @@ -57,32 +57,24 @@ namespace BinaryNinja::RTTI::Microsoft { CompleteObjectLocator(BinaryView *view, uint64_t address); }; - class MicrosoftRTTIProcessor + class MicrosoftRTTIProcessor : public RTTIProcessor { - Ref m_view; - Ref m_logger; bool allowMangledClassNames; bool allowAnonymousClassNames; bool checkWritableRData; bool virtualFunctionTableSweep; - std::map m_classInfo; + // This will process a CHD and store all `BaseClassInfo` in `classInfo`. + std::vector ProcessClassHierarchyDescriptor(uint64_t address, CompleteObjectLocator &coLocator, const ClassInfo &classInfo); - std::set m_visitedClassHierarchyDescAddrs; - - void DeserializedMetadata(const Ref &metadata); - - std::optional ProcessRTTI(uint64_t coLocatorAddr); - - std::optional ProcessVFT(uint64_t vftAddr, const ClassInfo &classInfo); + std::optional ProcessRTTI(uint64_t objectAddr) override; + std::optional ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo, std::optional baseClassInfo) override; public: - MicrosoftRTTIProcessor(const Ref &view, bool useMangled = true, bool checkRData = true, bool vftSweep = true, bool allowAnonymous = true); - - Ref SerializedMetadata(); + explicit MicrosoftRTTIProcessor(const Ref &view, bool useMangled = true, bool checkRData = true, bool vftSweep = true, bool allowAnonymous = true); - void ProcessRTTI(); + void ProcessRTTI() override; - void ProcessVFT(); + void ProcessVFT() override; }; } \ No newline at end of file -- cgit v1.3.1