From 0a356578e65cf54c5b654b59a509c2ebe29ab54b Mon Sep 17 00:00:00 2001 From: Mark Rowe Date: Tue, 24 Mar 2026 13:46:57 -0700 Subject: [DSC] Process Objective-C metadata when loading view from .bndb The processed Objective-C metadata is not saved to the .bdnb. It must be recomputed when the view is loaded. Fixes https://github.com/Vector35/binaryninja-api/issues/8030. --- view/sharedcache/core/SharedCacheController.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'view/sharedcache/core/SharedCacheController.cpp') diff --git a/view/sharedcache/core/SharedCacheController.cpp b/view/sharedcache/core/SharedCacheController.cpp index 8886748f..8ed011bd 100644 --- a/view/sharedcache/core/SharedCacheController.cpp +++ b/view/sharedcache/core/SharedCacheController.cpp @@ -292,3 +292,27 @@ void SharedCacheController::LoadMetadata(const Metadata& metadata) m_loadedImages.insert(region); } } + + +void SharedCacheController::ProcessObjCForLoadedImages(BinaryView& view) +{ + if (!m_processObjC || m_loadedImages.empty()) + return; + + for (const auto& headerAddress : m_loadedImages) + { + auto image = m_cache.GetImageAt(headerAddress); + if (!image) + continue; + + auto objcProcessor = DSCObjC::SharedCacheObjCProcessor(&view, image->headerAddress); + try + { + objcProcessor.ProcessObjCData(); + } + catch (std::exception& e) + { + m_logger->LogErrorForExceptionF(e, "Failed to restore ObjC metadata for image at {:#x}: {}", headerAddress, e.what()); + } + } +} -- cgit v1.3.1