dyld加载流程
- 程序从_dyly_start开始 -> dyld`dyldbootstrap::start
- 进入dyld:main函数
- 配置一些环境(sEnv) : rebase_dyld
- 加载共享换成 load shared cache
- DYLD2/DYLD3(闭包)
- 实例化主程序
- 加载动态库(首先是插入动态库insert library),主程序和动态库都会添加到allImages里面:loadallImages
- 链接住程序、绑定符号(非懒加载、弱符号)等
- 初始化方法InitializeMainExecutable
- dyld`ImageLoder::runInitializers:
- dyld`ImageLoder::processInitializers:
- dyld`ImageLoder::recursiveInitialization:
- dyld`dyld::notifySingle函数
- 执行一个回调,执行libobjc库里面的方法
- _objc_init初始化时赋值的一个函数Load_images,这里执行class_load_methods函数,然后call_class_loads函数调用各个类的Load方法
- doModInitFunction函数,调用全局C++对象的构造函数__attribute((constructor))
- 返回程序的入口函数,开始进入主程序的main函数
网友评论