主要观点:作者打开《OS Internals Volume 1》想跟随书中系统库示例,在 Ghidra 中却未找到libSystem.B.dyld
,经搜索发现 Apple 论坛解释,MacOS 11 后系统库已移至动态链接器共享缓存,不再在/usr/lib
,Big Sur 补丁说明也确认了这一点。Apple 将二进制文件打包进“缓存”文件,在启动时加载到内存,通过动态加载器拦截dlopen
等操作以提供缓存版本。
关键信息:
- 作者使用
otool -L /bin/ls
命令找到系统库路径。 - Apple 论坛解释系统库的变化及原因。
- Ghidra 可通过特定菜单导入缓存文件,选择要导入的库并以“Mac OS X Mach-O”格式导入可自动导入依赖库。
- 若使用 Hopper 可处理相关事宜,未测试;推荐使用
dyld-shared-cache-extractor
项目将缓存文件提取到文件系统的文件夹中。
重要细节: - 缓存文件位置在 macOS 14.7 中为
/System/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
和/System/Library/dyld/dyld_shared_cache_arm64e
。 - 导入时选择“Load Libraries From Disk”可自动导入依赖库。
- 关于此变化的性能相关原因可参考lobste.rs 上 lgerbarg 的评论。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。