Incomplete macOS 11+ dyld cache extractor with a focus on Metal-related dylibs.
- Apple: dyld, objc4 (prerequisites)
- Hopper Disassembler: Mach-O inspection, Objective-C struct definitions
- Mach-O Explorer, MachOView: Mach-O inspection
- Wikipedia: LEB128
- Moraea: code, guidance and testing
- copy header and load commands
- copy segments/sections, updating offsets and addresses
- process cache rebase chain
- generate opcodes
- generate bind opcodes
- from symbol pointer sections
- by scanning whole image and resolving external pointers
- generate exports trie
- regular
- re-export
- stub and resolver
- copy symbols, indirect symbols, and string table
- fix Objective-C structures
- revert selector uniquing
- revert protocol uniquing
- fix class, category, and protocol method lists
- mark UUIDs for testing
- produce fully compliant images
- satisfy
install_name_tool -id test
- satisfy
codesign -fs -
- satisfy
dyld_info -objc
- satisfy Stubber (
nm
, Objective-C runtime, linker) - satisfy
lldb
- satisfy
- produce working images
- work normally with selected images extracted and installed
- 12.0 DP6 - GeForce bundles
- 12.5 DP2 - MetalPerformanceShaders and sub-frameworks
- 12.5 DP3 - QuartzCore, CoreGraphics, Carbon, AppKit
- 12.5 - AMDMTLBronzeDriver, AMDShared, Metal, MetalPerformanceShaders, MTLCompiler, GPUCompiler
- 13.0 DP4 - QuartzCore, CoreGraphics, Carbon
- 13.0 DP4 - AppKit
- work normally with all images extracted and cache removed
- work normally with selected images extracted and installed
- support Big Sur
- support Monterey
- support Ventura
- without the
__objc_imageinfo
hack
- without the
- use sane amounts of RAM and CPU
- write automated tests to detect regressions