美文网首页iOS 开发 Objective-C
iOS 底层原理 day04 dyld Mach-O

iOS 底层原理 day04 dyld Mach-O

作者: 望穿秋水小作坊 | 来源:发表于2020-07-27 15:07 被阅读0次

一、动态库共享缓存(dyld shared cache)

  1. 从 iOS3.1 开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache)
  2. 缓存文件iPhone路径: /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
  3. dyld_shared_cache_armX 的 X 代表 ARM 处理器指令集架构
  4. 目前仅有 iPhone5、iPhone5C、iPad4 是 v7s架构,iPhone5s 以后的手机和 iPad 都是 arm64 的架构。
  5. 所有指令集原则上都是向下兼容的
  6. 动态库共享缓存非常明显的好处是节省内存(节约一些动态化共有信息描述)
  7. 现在 ida、hopper 反编译工具都可以识别动态库共享缓存

二、** Mach-O 的基本结构**: Mach-O 文件包含 3 个主要区域

  1. Header
  • 文件类型、目标架构类型等
  1. Load commands
  • 描述文件在虚拟内存中的逻辑结构、布局
  1. Raw segment data
  • 在 Load commands 中定义的 Segement 的原始数据

三、常见的 Mach-O 文件类型

  1. MH_OBJECT
  • 目标文件 (.o)
  • 静态库文件 (.1),静态库其实就是 N 个 .o 合并在一起
  1. MH_EXCUTE:可执行文件

  2. MH_DYLIB:动态库文件

  • .dylib
  • .framework/xx
  1. MH_DYLINKER:动态链接编辑器
  • /usr/lib/dyld
  1. MH_DSYM:存储着二进制文件符号信息的文件
  • .dSYM/Contents/Resources/DWARF/xx(常用语分享 APP 的崩溃信息)

四、查看的 Mach-O 文件类型信息的方法

  1. file 指令
carrotdeMacBook-Pro:clutch carrot__lsp$ file Beautiful_clutch 
Beautiful_clutch: Mach-O 64-bit executable arm64
  1. otool 指令
carrotdeMacBook-Pro:clutch carrot__lsp$ otool -l Beautiful_clutch | grep crypt
     cryptoff 16384
    cryptsize 98304
      cryptid 0
  1. MachOView Mac 上的 GUI 工具

五、dyld 和 Mach-O

  1. dyld 用于节奏一下类型的 Mach-O 文件
  • MH_EXECUTE
  • MH_DYLIB
  • MH_BUNDLE
  1. APP 的可执行文件、动态库都是由 dyld 负责加载的

相关文章

网友评论

    本文标题:iOS 底层原理 day04 dyld Mach-O

    本文链接:https://www.haomeiwen.com/subject/jpoalktx.html