diff options
| author | Mark Rowe <mark@vector35.com> | 2026-03-24 13:46:57 -0700 |
|---|---|---|
| committer | Mark Rowe <mark@vector35.com> | 2026-03-30 13:22:34 -0700 |
| commit | 0a356578e65cf54c5b654b59a509c2ebe29ab54b (patch) | |
| tree | 36ddeae516b824e77e3369599ba796d9eef7f7a9 /view/sharedcache/core/SharedCacheController.cpp | |
| parent | ddd7aa4e7cd5a1aa07a16c3895d1f91ebf49347b (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.cpp | 24 |
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()); + } + } +} |
