summaryrefslogtreecommitdiff
path: root/plugins/rtti/rtti.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/rtti.h
parent93e92844d77b72f07bd7563211d60dc3595cc2e0 (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.h26
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;