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.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/plugins/rtti/rtti.h b/plugins/rtti/rtti.h
index b46a33a1..00b105eb 100644
--- a/plugins/rtti/rtti.h
+++ b/plugins/rtti/rtti.h
@@ -6,6 +6,8 @@ constexpr const char *VIEW_METADATA_RTTI = "rtti";
constexpr int RTTI_CONFIDENCE = 100;
namespace BinaryNinja::RTTI {
+ Ref<Symbol> GetRealSymbol(BinaryView *view, uint64_t relocAddr, uint64_t symAddr);
+
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);
@@ -69,6 +71,14 @@ namespace BinaryNinja::RTTI {
class RTTIProcessor
{
protected:
+ enum class FunctionDiscoverState
+ {
+ Failed = 0,
+ AlreadyExists = 1,
+ Discovered = 2,
+ Extern = 3
+ };
+
Ref<BinaryView> m_view;
Ref<Logger> m_logger;
@@ -78,6 +88,10 @@ namespace BinaryNinja::RTTI {
virtual std::optional<ClassInfo> ProcessRTTI(uint64_t objectAddr) = 0;
virtual std::optional<VirtualFunctionTableInfo> ProcessVFT(uint64_t vftAddr, ClassInfo &classInfo, std::optional<BaseClassInfo> baseClassInfo) = 0;
+
+ [[nodiscard]] bool IsLikelyFunction(uint64_t addr) const;
+
+ [[nodiscard]] FunctionDiscoverState DiscoverVirtualFunction(uint64_t vftEntryAddr, uint64_t& vFuncAddr);
public:
virtual ~RTTIProcessor() = default;