summaryrefslogtreecommitdiff
path: root/plugins/rtti/microsoft.h
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-03-01 00:34:12 -0500
committerMason Reed <mason@vector35.com>2025-03-19 21:17:34 -0400
commitf719d1d5565f7b7b1237b8e183c2985f006fa3e4 (patch)
tree0fbb2c1af1254add49049abdec3f935669d658de /plugins/rtti/microsoft.h
parent93e92844d77b72f07bd7563211d60dc3595cc2e0 (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.h24
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