dyld的加载流程

195 阅读1分钟

什么是dyld?

  • dyld 是动态链接器。
  • 主要是链接mach-o文件,常见的mach-o文件有
  1. exec可执行文件
  2. .O类型的目标文件
  3. bundle文件

dyld加载的过程

  • 1、递归加载可行文件所依赖的所有动态库
  • 2、rebase 和binding
  • 3、掉起main()函数

如何查看dyld具体流程,添加+(void)load方法,查看调用的堆栈信息

从打印信息来看,调用的函数是:

  • dyld_start
  • dyld_bootstrap::start
  • dyld_main

接下来:

dyld_main 函数的执行流程

image.png

动态库是如何被加载的呢?

通过initializeMainExcutor()方法开始

image.png

image.png

  • 通过循环调用processInitializer来递归加载所依赖的动态库,
  • 加载动态库之前通过libsystem ,libdispatch,libobjc来初始化动态库所依赖的基础库

image.png

之后 是 smainExcutable(主程序开始初始化)

至此 动态库 和主程序均初始化完成