From 69598bf4de54956512b0cfa64d9451779a01d30f Mon Sep 17 00:00:00 2001 From: kat Date: Mon, 4 Nov 2024 10:20:37 -0500 Subject: [SharedCache] Add load option to disable automatic loading of libsystem_c --- view/sharedcache/core/SharedCache.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'view/sharedcache/core/SharedCache.cpp') diff --git a/view/sharedcache/core/SharedCache.cpp b/view/sharedcache/core/SharedCache.cpp index 40ccea6c..bc3b9321 100644 --- a/view/sharedcache/core/SharedCache.cpp +++ b/view/sharedcache/core/SharedCache.cpp @@ -1392,18 +1392,26 @@ SharedCache::SharedCache(BinaryNinja::Ref dscView) : m_ m_logger->LogError("Failed to perform initial load of Shared Cache"); } - for (const auto& [_, header] : m_headers) + auto settings = m_dscView->GetLoadSettings(VIEW_NAME); + bool autoLoadLibsystem = true; + if (settings && settings->Contains("loader.dsc.autoLoadLibSystem")) { - if (header.installName.find("libsystem_c.dylib") != std::string::npos) + autoLoadLibsystem = settings->Get("loader.dsc.autoLoadLibSystem", m_dscView); + } + if (autoLoadLibsystem) + { + for (const auto& [_, header] : m_headers) { - lock.unlock(); - m_logger->LogInfo("Loading core libsystem_c.dylib library"); - LoadImageWithInstallName(header.installName); - lock.lock(); - break ; + if (header.installName.find("libsystem_c.dylib") != std::string::npos) + { + lock.unlock(); + m_logger->LogInfo("Loading core libsystem_c.dylib library"); + LoadImageWithInstallName(header.installName); + lock.lock(); + break; + } } } - m_viewState = DSCViewStateLoaded; SaveToDSCView(); } -- cgit v1.3.1