From d18b770a1c6510846ca2dfb109ba41b965546b7f Mon Sep 17 00:00:00 2001 From: kat Date: Sat, 15 Jun 2024 13:13:48 -0400 Subject: [Objective-C] Nonlazy Category Support, improve category variable naming --- view/macho/objc.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'view/macho/objc.cpp') diff --git a/view/macho/objc.cpp b/view/macho/objc.cpp index 878552b4..417866ac 100644 --- a/view/macho/objc.cpp +++ b/view/macho/objc.cpp @@ -559,7 +559,6 @@ void ObjCProcessor::LoadCategories(BinaryReader* reader, Ref
classPtrSe category_t cat; reader->Seek(i); - m_data->DefineDataVariable(i, ptrType); auto catLocation = ReadPointerAccountingForRelocations(reader); reader->Seek(catLocation); @@ -577,7 +576,6 @@ void ObjCProcessor::LoadCategories(BinaryReader* reader, Ref
classPtrSe m_logger->LogError("Failed to read category pointed to by 0x%llx", i); continue; } - m_data->DefineDataVariable(catLocation, catType); std::string categoryAdditionsName; std::string categoryBaseClassName; @@ -616,6 +614,8 @@ void ObjCProcessor::LoadCategories(BinaryReader* reader, Ref
classPtrSe categoryAdditionsName = std::to_string(catLocation); } category.name = categoryBaseClassName + " (" + categoryAdditionsName + ")"; + DefineObjCSymbol(BNSymbolType::DataSymbol, ptrType, "categoryPtr_" + category.name, i, true); + DefineObjCSymbol(BNSymbolType::DataSymbol, catType, "category_" + category.name, catLocation, true); if (cat.instanceMethods) { @@ -1426,6 +1426,8 @@ void ObjCProcessor::ProcessObjCData() if (auto catList = m_data->GetSectionByName("__objc_catlist")) // Do this after loading class type data. LoadCategories(&reader, catList); + if (auto nonLazyCatList = m_data->GetSectionByName("__objc_nlcatlist")) // Do this after loading class type data. + LoadCategories(&reader, nonLazyCatList); for (auto& [_, cat] : m_categories) ApplyMethodTypes(cat); -- cgit v1.3.1