From 93e92844d77b72f07bd7563211d60dc3595cc2e0 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Wed, 4 Dec 2024 18:17:10 -0500 Subject: Consolidate metadata for RTTI processors and a bunch of misc fixes Also allows for both processors to be ran for a single binary --- plugins/rtti/rtti.h | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'plugins/rtti/rtti.h') diff --git a/plugins/rtti/rtti.h b/plugins/rtti/rtti.h index 9740b68f..474253ec 100644 --- a/plugins/rtti/rtti.h +++ b/plugins/rtti/rtti.h @@ -31,9 +31,16 @@ namespace BinaryNinja::RTTI { static VirtualFunctionTableInfo DeserializedMetadata(const Ref &metadata); }; + enum class RTTIProcessorType + { + Microsoft = 0, + Itanium = 1, + }; + // TODO: This needs to have some flags. Virtual, pure iirc. struct ClassInfo { + RTTIProcessorType processor; std::string className; std::optional baseClassName; std::optional classOffset; @@ -44,4 +51,28 @@ namespace BinaryNinja::RTTI { static ClassInfo DeserializedMetadata(const Ref &metadata); }; -} \ No newline at end of file + + class RTTIProcessor + { + protected: + Ref m_view; + Ref m_logger; + + std::map m_classInfo; + std::map m_unhandledClassInfo; + + virtual std::optional ProcessRTTI(uint64_t objectAddr) = 0; + + virtual std::optional ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo) = 0; + public: + virtual ~RTTIProcessor() = default; + + void DeserializedMetadata(RTTIProcessorType type, const Ref &metadata); + + Ref SerializedMetadata(); + + virtual void ProcessRTTI() = 0; + + virtual void ProcessVFT() = 0; + }; +} -- cgit v1.3.1