-
-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
iOS 15 new shared cache format. #15
Comments
Okay, I believe this was introduced in iOS 15 beta. The Dyld Shared Cache (DSC) seems to be split into separate files, i.e.
Looking at the header of each of these, we can find out a few things. dyld_shared_cache_arm64
dyld_shared_cache_arm64.1
dyld_shared_cache_arm64.2
dyld_shared_cache_arm64.3
dyld_shared_cache_arm64.symbols
Basically different elements are separated, for example, all the local symbols are stored in the ".symbols" file. Also by examining the dyld source code, it's likely that the mapping info (located with mappingOffset) is placed directly after the header. Currently, the size of the header is 320 bytes, but the mappingOffset is set to 456, which means that we are missing some fields in the new header. Unfortunately, until Apple open sources their new format, It would be hard to add support for this. |
Got 3 new header fields so far - https://github.com/blacktop/ipsw/blob/master/hack/extras/Dyld.bt (14 more to go)
|
Interesting! Did you disassemble dyld to get the size of the new fields? Until the actual release of the code, I guess I can look further into it. |
I was going to do that eventually, I am mostly using 010 Editor to jump around and make guesses at what the fields are, if they fields made sense as uint64 or uint32 etc is a try and guess procedure right now, but it got me 3 fields so far ;) There are so MANY new fields, this seems like a pretty big change, but it is very strange that they would move |
As for keeping the old field around, I think it's for some cross-compatibility so that older dyld loaders could still make sense of newer caches. Like it would be better for an older loader to read the Also, it doesn't make sense that they would just move the If possible can you link the Twitter conversation or elaborate more on it? |
got another field: (and correct name for "numSplits" <SNIP>
uint32 numSubCaches; // number of dyld_shared_cache .1,.2,.3 files
Uuid symbolSubCacheUUID; // unique value for .symbols sub-cache
<SNIP> |
Nice! how are you getting these field names? |
RE of There is also a comparison of subcache UUIDs at the uint32 right above the |
Got a few more fields, but they are kinda strange, this format feels un-finalized 🤷 |
It might be a beta thing. They might not adopt this format for early iOS 15 releases. |
I've been meaning to blog about my findings for a while, but I've realized I write english like a complete moron. In the mean time I hope this makes sense to people? |
This is really helpful, I’ll see what I can do with DyldExtractor when I get the chance. |
I uploaded a beta branch here. It contains all the fixes for the new format, I'm just doing a lot of bug fixes now. |
iOS 15 caches are now supported with version 2.0.0! |
latest revision has completely changed the format of the shared cache which may end up requiring a rewrite or seperate project to tackle. Here's a spot to compile info on the topic.
The text was updated successfully, but these errors were encountered: