diff options
| author | Mason Reed <mason@vector35.com> | 2024-12-04 18:17:10 -0500 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-03-19 21:17:34 -0400 |
| commit | 93e92844d77b72f07bd7563211d60dc3595cc2e0 (patch) | |
| tree | 5339586f4e2ebbbfa1c754fd175bc9264b6cb668 /plugins/rtti/rtti.h | |
| parent | 845dcf25563ed4982ea3f8fbca9aa6893bba7b16 (diff) | |
Consolidate metadata for RTTI processors and a bunch of misc fixes
Also allows for both processors to be ran for a single binary
Diffstat (limited to 'plugins/rtti/rtti.h')
| -rw-r--r-- | plugins/rtti/rtti.h | 33 |
1 files changed, 32 insertions, 1 deletions
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> &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<std::string> baseClassName; std::optional<uint64_t> classOffset; @@ -44,4 +51,28 @@ namespace BinaryNinja::RTTI { static ClassInfo DeserializedMetadata(const Ref<Metadata> &metadata); }; -}
\ No newline at end of file + + class RTTIProcessor + { + protected: + Ref<BinaryView> m_view; + Ref<Logger> m_logger; + + std::map<uint64_t, ClassInfo> m_classInfo; + std::map<uint64_t, ClassInfo> m_unhandledClassInfo; + + virtual std::optional<ClassInfo> ProcessRTTI(uint64_t objectAddr) = 0; + + virtual std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo) = 0; + public: + virtual ~RTTIProcessor() = default; + + void DeserializedMetadata(RTTIProcessorType type, const Ref<Metadata> &metadata); + + Ref<Metadata> SerializedMetadata(); + + virtual void ProcessRTTI() = 0; + + virtual void ProcessVFT() = 0; + }; +} |
