summaryrefslogtreecommitdiff
path: root/view/macho/objc.cpp
diff options
context:
space:
mode:
authorkat <kat@vector35.com>2024-06-15 13:13:48 -0400
committerkat <kat@vector35.com>2024-06-16 10:43:57 -0400
commitd18b770a1c6510846ca2dfb109ba41b965546b7f (patch)
tree36b6c740c35d849f757d7256320a53a1fd288496 /view/macho/objc.cpp
parentb05563189a7e2445762104726d767da7664903f0 (diff)
[Objective-C] Nonlazy Category Support, improve category variable naming
Diffstat (limited to 'view/macho/objc.cpp')
-rw-r--r--view/macho/objc.cpp6
1 files changed, 4 insertions, 2 deletions
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<Section> 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<Section> 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<Section> 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);