-
Notifications
You must be signed in to change notification settings - Fork 157
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Correctly handle dyld caches on macOS 13 and above (#642)
This allows successful parsing of dyld caches on macOS 13 and above on Intel Macs. The main dyld cache file on macOS contains an array of subcache info structs, each of which specifies the UUID (and some other information) of each subcache. `DyldCache::parse` checks that the subcache UUIDs match these expected UUIDs. In macOS 13, the format of the subcache info struct changed: it gained an additional field after the UUID field. This means that as soon as you had more than one subcache, our UUID check would fail, because the second subcache UUID would be read from the wrong offset. I didn't notice this on my Apple Silicon Mac, because the arm64e dyld cache only has one subcache: `dyld_shared_cache_arm64e.01`. But on Intel Macs, there are currently four subcaches: `dyld_shared_cache_x86_64.01`, `.02`, `.03`, and `.04`. In practice this means that my software hasn't been able to symbolicate macOS system libraries on Intel Macs since the release of macOS 13. This commit adds the new struct definition and makes the UUID check work correctly. This is a breaking change to the public API. I added a `DyldSubCacheSlice` enum, but I'm not particularly fond of it. dyldcachedump was working correctly on macOS 13+ because it was trying the "leading zero" suffix format as well as the "no leading zero" suffix format. This commit changes it to read the suffix from the main cache header. objdump was not able to parse dyld shared cache files on macOS 13+ because it was only using the "no leading zero" suffix format, and thus not finding the subcaches.
- Loading branch information
Showing
5 changed files
with
177 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters