diff options
| author | Mason Reed <mason@vector35.com> | 2025-03-01 00:34:12 -0500 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-03-19 21:17:34 -0400 |
| commit | f719d1d5565f7b7b1237b8e183c2985f006fa3e4 (patch) | |
| tree | 0fbb2c1af1254add49049abdec3f935669d658de /plugins/rtti/rtti.h | |
| parent | 93e92844d77b72f07bd7563211d60dc3595cc2e0 (diff) | |
Refactor and fixup MSVC and Itanium RTTI
Bunch of misc fixes and performance improvements
Diffstat (limited to 'plugins/rtti/rtti.h')
| -rw-r--r-- | plugins/rtti/rtti.h | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/plugins/rtti/rtti.h b/plugins/rtti/rtti.h index 474253ec..e2913db4 100644 --- a/plugins/rtti/rtti.h +++ b/plugins/rtti/rtti.h @@ -16,7 +16,7 @@ namespace BinaryNinja::RTTI { { uint64_t funcAddr; - Ref<Metadata> SerializedMetadata(); + Ref<Metadata> SerializedMetadata() const; static VirtualFunctionInfo DeserializedMetadata(const Ref<Metadata> &metadata); }; @@ -26,7 +26,7 @@ namespace BinaryNinja::RTTI { uint64_t address; std::vector<VirtualFunctionInfo> virtualFunctions; - Ref<Metadata> SerializedMetadata(); + Ref<Metadata> SerializedMetadata(bool serializeFunctions = true) const; static VirtualFunctionTableInfo DeserializedMetadata(const Ref<Metadata> &metadata); }; @@ -37,17 +37,29 @@ namespace BinaryNinja::RTTI { Itanium = 1, }; + struct BaseClassInfo + { + std::string className; + // TODO: This has to be optional, as we might need to resolve this at a later stage. + // TODO: The offset also might literally not exist. + uint64_t offset; + std::optional<VirtualFunctionTableInfo> vft; + + Ref<Metadata> SerializedMetadata() const; + + static BaseClassInfo DeserializedMetadata(const Ref<Metadata> &metadata); + }; + // 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; + std::optional<VirtualFunctionTableInfo> vft; - std::optional<VirtualFunctionTableInfo> baseVft; + std::vector<BaseClassInfo> baseClasses; - Ref<Metadata> SerializedMetadata(); + Ref<Metadata> SerializedMetadata() const; static ClassInfo DeserializedMetadata(const Ref<Metadata> &metadata); }; @@ -63,7 +75,7 @@ namespace BinaryNinja::RTTI { virtual std::optional<ClassInfo> ProcessRTTI(uint64_t objectAddr) = 0; - virtual std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo) = 0; + virtual std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo, std::optional<BaseClassInfo> baseClassInfo) = 0; public: virtual ~RTTIProcessor() = default; |
