diff options
| author | kat <kat@vector35.com> | 2024-06-15 13:13:48 -0400 |
|---|---|---|
| committer | kat <kat@vector35.com> | 2024-06-16 10:43:57 -0400 |
| commit | d18b770a1c6510846ca2dfb109ba41b965546b7f (patch) | |
| tree | 36b6c740c35d849f757d7256320a53a1fd288496 /view/macho/objc.cpp | |
| parent | b05563189a7e2445762104726d767da7664903f0 (diff) | |
[Objective-C] Nonlazy Category Support, improve category variable naming
Diffstat (limited to 'view/macho/objc.cpp')
| -rw-r--r-- | view/macho/objc.cpp | 6 |
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); |
