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/rtti/rtti.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 plugins/rtti/rtti.h (limited to 'plugins/rtti/rtti.h') 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 DemangleNameMS(BinaryView* view, bool allowMangled, const std::string &mangledName); + + std::optional DemangleNameGNU3(BinaryView* view, bool allowMangled, const std::string &mangledName); + + std::optional DemangleNameLLVM(bool allowMangled, const std::string &mangledName); + + 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); + }; + + // TODO: This needs to have some flags. Virtual, pure iirc. + 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); + }; +} \ No newline at end of file -- cgit v1.3.1