#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 DemangleNameItanium(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); }; }