summaryrefslogtreecommitdiff
path: root/plugins/msvc_rtti/rtti.h
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2024-11-22 18:16:32 -0500
committerMason Reed <mason@vector35.com>2025-03-19 21:17:34 -0400
commit9ff2b8d804a34941a6085af85b6749c20549240e (patch)
tree9b78b478476cfb66fc68828087ad9ff99cdfacb5 /plugins/msvc_rtti/rtti.h
parent7d66d87a4600c8954c585c3c690546fc56903d44 (diff)
Itanium RTTI scaffolding
Diffstat (limited to 'plugins/msvc_rtti/rtti.h')
-rw-r--r--plugins/msvc_rtti/rtti.h123
1 files changed, 0 insertions, 123 deletions
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<uint64_t> 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<Metadata> SerializedMetadata();
-
- static VirtualFunctionInfo DeserializedMetadata(const Ref<Metadata> &metadata);
- };
-
- struct VirtualFunctionTableInfo
- {
- uint64_t address;
- std::vector<VirtualFunctionInfo> virtualFunctions;
-
- Ref<Metadata> SerializedMetadata();
-
- static VirtualFunctionTableInfo DeserializedMetadata(const Ref<Metadata> &metadata);
- };
-
- struct ClassInfo
- {
- std::string className;
- std::optional<std::string> baseClassName;
- std::optional<uint64_t> classOffset;
- std::optional<VirtualFunctionTableInfo> vft;
- std::optional<VirtualFunctionTableInfo> baseVft;
-
- Ref<Metadata> SerializedMetadata();
-
- static ClassInfo DeserializedMetadata(const Ref<Metadata> &metadata);
- };
-
- class MicrosoftRTTIProcessor
- {
- Ref<BinaryView> m_view;
- Ref<Logger> m_logger;
- bool allowMangledClassNames;
- bool allowAnonymousClassNames;
- bool checkWritableRData;
- bool virtualFunctionTableSweep;
-
- std::map<uint64_t, ClassInfo> m_classInfo;
-
- std::set<uint64_t> m_visitedClassHierarchyDescAddrs;
-
- void DeserializedMetadata(const Ref<Metadata> &metadata);
-
- std::optional<std::string> DemangleName(const std::string &mangledName);
-
- std::optional<ClassInfo> ProcessRTTI(uint64_t coLocatorAddr);
-
- std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, const ClassInfo &classInfo);
-
- public:
- MicrosoftRTTIProcessor(const Ref<BinaryView> &view, bool useMangled = true, bool checkRData = true, bool vftSweep = true, bool allowAnonymous = true);
-
- Ref<Metadata> SerializedMetadata();
-
- void ProcessRTTI();
-
- void ProcessVFT();
- };
-} \ No newline at end of file