From 9ff2b8d804a34941a6085af85b6749c20549240e Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Fri, 22 Nov 2024 18:16:32 -0500 Subject: Itanium RTTI scaffolding --- plugins/msvc_rtti/rtti.h | 123 ----------------------------------------------- 1 file changed, 123 deletions(-) delete mode 100644 plugins/msvc_rtti/rtti.h (limited to 'plugins/msvc_rtti/rtti.h') diff --git a/plugins/msvc_rtti/rtti.h b/plugins/msvc_rtti/rtti.h deleted file mode 100644 index 0bb3a733..00000000 --- a/plugins/msvc_rtti/rtti.h +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once - -#include "binaryninjaapi.h" - -constexpr const char *VIEW_METADATA_MSVC = "msvc"; - -namespace BinaryNinja { - struct BaseClassArray - { - uint32_t length; - std::vector descriptors; - - BaseClassArray(BinaryView *view, uint64_t address, uint32_t length); - }; - - struct ClassHierarchyDescriptor - { - uint32_t signature; - uint32_t attributes; - uint32_t numBaseClasses; - int32_t pBaseClassArray; - - ClassHierarchyDescriptor(BinaryView *view, uint64_t address); - }; - - struct BaseClassDescriptor - { - int32_t pTypeDescriptor; - uint32_t numContainedBases; - int32_t where_mdisp; - int32_t where_pdisp; - int32_t where_vdisp; - uint32_t attributes; - int32_t pClassHierarchyDescriptor; - - BaseClassDescriptor(BinaryView *view, uint64_t address); - }; - - struct TypeDescriptor - { - uint64_t pVFTable; - uint64_t spare; - std::string name; - - TypeDescriptor(BinaryView *view, uint64_t address); - }; - - struct CompleteObjectLocator - { - uint32_t signature; - uint32_t offset; - uint32_t cdOffset; - int32_t pTypeDescriptor; - int32_t pClassHierarchyDescriptor; - // Only on 64 bit - int32_t pSelf; - - CompleteObjectLocator(BinaryView *view, uint64_t address); - }; - - struct VirtualFunctionInfo - { - uint64_t funcAddr; - - Ref SerializedMetadata(); - - static VirtualFunctionInfo DeserializedMetadata(const Ref &metadata); - }; - - struct VirtualFunctionTableInfo - { - uint64_t address; - std::vector virtualFunctions; - - Ref SerializedMetadata(); - - static VirtualFunctionTableInfo DeserializedMetadata(const Ref &metadata); - }; - - struct ClassInfo - { - std::string className; - std::optional baseClassName; - std::optional classOffset; - std::optional vft; - std::optional baseVft; - - Ref SerializedMetadata(); - - static ClassInfo DeserializedMetadata(const Ref &metadata); - }; - - class MicrosoftRTTIProcessor - { - Ref m_view; - Ref m_logger; - bool allowMangledClassNames; - bool allowAnonymousClassNames; - bool checkWritableRData; - bool virtualFunctionTableSweep; - - std::map m_classInfo; - - std::set m_visitedClassHierarchyDescAddrs; - - void DeserializedMetadata(const Ref &metadata); - - std::optional DemangleName(const std::string &mangledName); - - std::optional ProcessRTTI(uint64_t coLocatorAddr); - - std::optional ProcessVFT(uint64_t vftAddr, const ClassInfo &classInfo); - - public: - MicrosoftRTTIProcessor(const Ref &view, bool useMangled = true, bool checkRData = true, bool vftSweep = true, bool allowAnonymous = true); - - Ref SerializedMetadata(); - - void ProcessRTTI(); - - void ProcessVFT(); - }; -} \ No newline at end of file -- cgit v1.3.1