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/microsoft.h | |
| parent | 93e92844d77b72f07bd7563211d60dc3595cc2e0 (diff) | |
Refactor and fixup MSVC and Itanium RTTI
Bunch of misc fixes and performance improvements
Diffstat (limited to 'plugins/rtti/microsoft.h')
| -rw-r--r-- | plugins/rtti/microsoft.h | 24 |
1 files changed, 8 insertions, 16 deletions
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<BinaryView> m_view; - Ref<Logger> m_logger; bool allowMangledClassNames; bool allowAnonymousClassNames; bool checkWritableRData; bool virtualFunctionTableSweep; - std::map<uint64_t, ClassInfo> m_classInfo; + // This will process a CHD and store all `BaseClassInfo` in `classInfo`. + std::vector<BaseClassInfo> ProcessClassHierarchyDescriptor(uint64_t address, CompleteObjectLocator &coLocator, const ClassInfo &classInfo); - std::set<uint64_t> m_visitedClassHierarchyDescAddrs; - - void DeserializedMetadata(const Ref<Metadata> &metadata); - - std::optional<ClassInfo> ProcessRTTI(uint64_t coLocatorAddr); - - std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, const ClassInfo &classInfo); + std::optional<ClassInfo> ProcessRTTI(uint64_t objectAddr) override; + std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo, std::optional<BaseClassInfo> baseClassInfo) override; public: - MicrosoftRTTIProcessor(const Ref<BinaryView> &view, bool useMangled = true, bool checkRData = true, bool vftSweep = true, bool allowAnonymous = true); - - Ref<Metadata> SerializedMetadata(); + explicit MicrosoftRTTIProcessor(const Ref<BinaryView> &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 |
