summaryrefslogtreecommitdiff
path: root/plugins/rtti/rtti.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/rtti/rtti.h')
-rw-r--r--plugins/rtti/rtti.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/plugins/rtti/rtti.h b/plugins/rtti/rtti.h
new file mode 100644
index 00000000..e53e1dac
--- /dev/null
+++ b/plugins/rtti/rtti.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "binaryninjaapi.h"
+
+constexpr const char *VIEW_METADATA_RTTI = "rtti";
+constexpr int RTTI_CONFIDENCE = 100;
+
+namespace BinaryNinja::RTTI {
+ std::optional<std::string> DemangleNameMS(BinaryView* view, bool allowMangled, const std::string &mangledName);
+
+ std::optional<std::string> DemangleNameGNU3(BinaryView* view, bool allowMangled, const std::string &mangledName);
+
+ std::optional<std::string> DemangleNameLLVM(bool allowMangled, const std::string &mangledName);
+
+ 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);
+ };
+
+ // TODO: This needs to have some flags. Virtual, pure iirc.
+ 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);
+ };
+} \ No newline at end of file