summaryrefslogtreecommitdiff
path: root/view/sharedcache/core/SharedCacheController.cpp
diff options
context:
space:
mode:
authorMark Rowe <mark@vector35.com>2026-03-24 13:46:57 -0700
committerMark Rowe <mark@vector35.com>2026-03-30 13:22:34 -0700
commit0a356578e65cf54c5b654b59a509c2ebe29ab54b (patch)
tree36ddeae516b824e77e3369599ba796d9eef7f7a9 /view/sharedcache/core/SharedCacheController.cpp
parentddd7aa4e7cd5a1aa07a16c3895d1f91ebf49347b (diff)
[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.
Diffstat (limited to 'view/sharedcache/core/SharedCacheController.cpp')
-rw-r--r--view/sharedcache/core/SharedCacheController.cpp24
1 files changed, 24 insertions, 0 deletions
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());
+ }
+ }
+}