@@ -314,7 +314,9 @@ void SharedCache::PerformInitialLoad()
314314 }
315315
316316 if (primaryCacheHeader.objcOptsOffset && primaryCacheHeader.objcOptsSize ) {
317- MutableState ().objcOptimizationDataRange = {primaryCacheHeader.objcOptsOffset , primaryCacheHeader.objcOptsSize };
317+ uint64_t objcOptsOffset = primaryCacheHeader.objcOptsOffset ;
318+ uint64_t objcOptsSize = primaryCacheHeader.objcOptsSize ;
319+ MutableState ().objcOptimizationDataRange = {objcOptsOffset, objcOptsSize};
318320 }
319321
320322 switch (State ().cacheFormat )
@@ -3309,30 +3311,38 @@ extern "C"
33093311 {
33103312 if (cache->object )
33113313 {
3312- auto vm = cache->object ->GetVMMap (true );
3313- auto viewImageHeaders = cache->object ->AllImageHeaders ();
3314- *count = viewImageHeaders.size ();
3315- BNDSCImage* images = (BNDSCImage*)malloc (sizeof (BNDSCImage) * viewImageHeaders.size ());
3316- size_t i = 0 ;
3317- for (const auto & [baseAddress, header] : viewImageHeaders)
3318- {
3319- images[i].name = BNAllocString (header.installName .c_str ());
3320- images[i].headerAddress = baseAddress;
3321- images[i].mappingCount = header.sections .size ();
3322- images[i].mappings = (BNDSCImageMemoryMapping*)malloc (sizeof (BNDSCImageMemoryMapping) * header.sections .size ());
3323- for (size_t j = 0 ; j < header.sections .size (); j++)
3314+ try {
3315+ auto vm = cache->object ->GetVMMap (true );
3316+ auto viewImageHeaders = cache->object ->AllImageHeaders ();
3317+ *count = viewImageHeaders.size ();
3318+ BNDSCImage* images = (BNDSCImage*)malloc (sizeof (BNDSCImage) * viewImageHeaders.size ());
3319+ size_t i = 0 ;
3320+ for (const auto & [baseAddress, header] : viewImageHeaders)
33243321 {
3325- const auto sectionStart = header.sections [j].addr ;
3326- images[i].mappings [j].rawViewOffset = header.sections [j].offset ;
3327- images[i].mappings [j].vmAddress = sectionStart;
3328- images[i].mappings [j].size = header.sections [j].size ;
3329- images[i].mappings [j].name = BNAllocString (header.sectionNames [j].c_str ());
3330- images[i].mappings [j].filePath = BNAllocString (vm->MappingAtAddress (sectionStart).first .filePath .c_str ());
3331- images[i].mappings [j].loaded = cache->object ->IsMemoryMapped (sectionStart);
3322+ images[i].name = BNAllocString (header.installName .c_str ());
3323+ images[i].headerAddress = baseAddress;
3324+ images[i].mappingCount = header.sections .size ();
3325+ images[i].mappings = (BNDSCImageMemoryMapping*)malloc (sizeof (BNDSCImageMemoryMapping) * header.sections .size ());
3326+ for (size_t j = 0 ; j < header.sections .size (); j++)
3327+ {
3328+ const auto sectionStart = header.sections [j].addr ;
3329+ images[i].mappings [j].rawViewOffset = header.sections [j].offset ;
3330+ images[i].mappings [j].vmAddress = sectionStart;
3331+ images[i].mappings [j].size = header.sections [j].size ;
3332+ images[i].mappings [j].name = BNAllocString (header.sectionNames [j].c_str ());
3333+ images[i].mappings [j].filePath = BNAllocString (vm->MappingAtAddress (sectionStart).first .filePath .c_str ());
3334+ images[i].mappings [j].loaded = cache->object ->IsMemoryMapped (sectionStart);
3335+ }
3336+ i++;
33323337 }
3333- i++;
3338+ return images;
3339+ }
3340+ catch (...)
3341+ {
3342+ LogError (" SharedCache: Failed to load image listing. Likely caused by a ser/deserialization error or load failure" );
3343+ *count = 0 ;
3344+ return nullptr ;
33343345 }
3335- return images;
33363346 }
33373347 *count = 0 ;
33383348 return nullptr ;
0 commit comments