From b05563189a7e2445762104726d767da7664903f0 Mon Sep 17 00:00:00 2001 From: kat Date: Sat, 15 Jun 2024 11:58:10 -0400 Subject: [Objective-C] Parse protocol information. --- view/macho/objc.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'view/macho/objc.h') diff --git a/view/macho/objc.h b/view/macho/objc.h index a8de861d..14d7ed4e 100644 --- a/view/macho/objc.h +++ b/view/macho/objc.h @@ -48,6 +48,7 @@ namespace BinaryNinja { uint64_t count; } protocol_list_t; typedef struct { + view_ptr_t isa; view_ptr_t mangledName; view_ptr_t protocols; view_ptr_t instanceMethods; @@ -128,6 +129,16 @@ namespace BinaryNinja { QualifiedName associatedName; }; + class Protocol { + public: + std::string name; + std::vector protocols; + ClassBase instanceMethods; + ClassBase classMethods; + ClassBase optionalInstanceMethods; + ClassBase optionalClassMethods; + }; + struct QualifiedNameOrType { BinaryNinja::Ref type = nullptr; BinaryNinja::QualifiedName name; @@ -155,6 +166,8 @@ namespace BinaryNinja { QualifiedName classRO; QualifiedName cls; QualifiedName category; + QualifiedName protocol; + QualifiedName protocolList; QualifiedName ivar; QualifiedName ivarList; } m_typeNames; @@ -166,6 +179,7 @@ namespace BinaryNinja { Ref m_logger; std::map m_classes; std::map m_categories; + std::map m_protocols; std::unordered_map m_selectorCache; std::unordered_map m_localMethods; @@ -189,6 +203,7 @@ namespace BinaryNinja { void ReadMethodList(BinaryReader* reader, ClassBase& cls, std::string name, view_ptr_t start); void LoadClasses(BinaryReader* reader, Ref
listSection); void LoadCategories(BinaryReader* reader, Ref
listSection); + void LoadProtocols(BinaryReader* reader, Ref
listSection); void GenerateClassTypes(); bool ApplyMethodType(Class& cls, Method& method, bool isInstanceMethod); void ApplyMethodTypes(Class& cls); -- cgit v1.3.1