> 文章列表 > 10、Dyld总结

10、Dyld总结

10、Dyld总结

  • 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函数.
  • 做逆向防护时隐藏自己的防护方法