diff options
Diffstat (limited to 'view/sharedcache/core/SharedCache.cpp')
| -rw-r--r-- | view/sharedcache/core/SharedCache.cpp | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/view/sharedcache/core/SharedCache.cpp b/view/sharedcache/core/SharedCache.cpp index 6db1037d..0ba4f184 100644 --- a/view/sharedcache/core/SharedCache.cpp +++ b/view/sharedcache/core/SharedCache.cpp @@ -576,31 +576,36 @@ void SharedCache::PerformInitialLoad() } // Load .symbols subcache + try { + auto subCachePath = path + ".symbols"; + auto subCacheFile = MMappedFileAccessor::Open(m_dscView, m_dscView->GetFile()->GetSessionId(), subCachePath)->lock(); - auto subCachePath = path + ".symbols"; - auto subCacheFile = MMappedFileAccessor::Open(m_dscView, m_dscView->GetFile()->GetSessionId(), subCachePath)->lock(); + dyld_cache_header subCacheHeader {}; + uint64_t headerSize = subCacheFile->ReadUInt32(16); + if (headerSize > sizeof(dyld_cache_header)) + { + m_logger->LogDebug("Header size is larger than expected (0x%llx), using default size (0x%llx)", headerSize, + sizeof(dyld_cache_header)); + headerSize = sizeof(dyld_cache_header); + } + subCacheFile->Read(&subCacheHeader, 0, headerSize); - dyld_cache_header subCacheHeader {}; - uint64_t headerSize = subCacheFile->ReadUInt32(16); - if (headerSize > sizeof(dyld_cache_header)) - { - m_logger->LogDebug("Header size is larger than expected (0x%llx), using default size (0x%llx)", headerSize, - sizeof(dyld_cache_header)); - headerSize = sizeof(dyld_cache_header); - } - subCacheFile->Read(&subCacheHeader, 0, headerSize); + dyld_cache_mapping_info subCacheMapping {}; + BackingCache subCache; - dyld_cache_mapping_info subCacheMapping {}; - BackingCache subCache; + for (size_t j = 0; j < subCacheHeader.mappingCount; j++) + { + subCacheFile->Read(&subCacheMapping, subCacheHeader.mappingOffset + (j * sizeof(subCacheMapping)), + sizeof(subCacheMapping)); + subCache.mappings.push_back(subCacheMapping); + } - for (size_t j = 0; j < subCacheHeader.mappingCount; j++) + MutableState().backingCaches.push_back(std::move(subCache)); + } + catch (...) { - subCacheFile->Read(&subCacheMapping, subCacheHeader.mappingOffset + (j * sizeof(subCacheMapping)), - sizeof(subCacheMapping)); - subCache.mappings.push_back(subCacheMapping); + m_logger->LogWarn("Failed to locate .symbols subcache. Non-exported symbol information may be missing."); } - - MutableState().backingCaches.push_back(std::move(subCache)); break; } case iOS16CacheFormat: |
