@@ -314,7 +314,9 @@ void SharedCache::PerformInitialLoad()
314
314
}
315
315
316
316
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};
318
320
}
319
321
320
322
switch (State ().cacheFormat )
@@ -3309,30 +3311,38 @@ extern "C"
3309
3311
{
3310
3312
if (cache->object )
3311
3313
{
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)
3324
3321
{
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++;
3332
3337
}
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 ;
3334
3345
}
3335
- return images;
3336
3346
}
3337
3347
*count = 0 ;
3338
3348
return nullptr ;
0 commit comments