10、Dyld总结
网友:sslake
文章列表
2024-03-22 02:07:45
- Dyld: 动态链接器,加载所有的库和可执行文件
- dyld加载流程:
- 程序执行从_dyld_start开始 --> dyld`dyldbootstrap::start
- 进入dyld:main函数
- 配置一些环境: rebase_dyld
- 加载共享缓存
- DYLD2/DYLD3(闭包模式)
- 实例化主程序
- 加载动态库(首先是插入的动态库)(主程序和动态库都会添加到allImages里面: loadAllImages)
- 链接主程序、绑定符号(非懒加载、弱符号)等等
- 最关键的: 初始化方法initializeMainExecutable
- dyld`ImageLoader::runinitializers
- dyld`ImageLoader::processInitializers:
- dyld`ImageLoader::recursizeInitialization:
- dyld`dyld::notifySingle: 函数
- 此函数执行一个回调
- 通过断点调试: 此回调是_objc_init初始化时赋值的一个函数Load_images
- Load_images里面执行call_load_methods函数
- call_load_methods函数:循环调用各个类的load方法
- doModInitFunction函数
- 内部会调用全局C++对象的构造函数 __attribute__((constructor))的C函数
- 返回主程序的入口函数.开始进入主程序的main函数.