ios应用程序加载分析(二)

为了不至于分析链条发生断层,请参阅ios应用程序加载分析(一)

_dyld_objc_notify_register ---- sNotifyObjcInit 是如何关联上的

sNotifyObjcInit 分析源头

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

以上源码出自于dyld

在这里插入图片描述

上一段源码出自于libobjc, libdyld与libobjc通过_dyld_objc_notify_register架起桥梁

在这里插入图片描述
在这里插入图片描述

回到加载流程图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

与 libSystem_initializer 衔接上,此时缺口补上

map_images()镜像文件类的信息 class ro rw protocols 处理

根据以上分析得到句柄出处 sNotifyObjcInit

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

arr_init()

  • SideTablesMap.init(); 初始化散列表

  • _objc_associations_init(); 关联对象管理 初始化

  • startWeakTableScan(); 扫描若引用

在这里插入图片描述

修复selector

在这里插入图片描述

在这里插入图片描述

Fix up old objc_msgSend_fixup call sites

在这里插入图片描述

在这里插入图片描述

实现 (有实现+load方法)的类

在这里插入图片描述

load_images() load方法 - c++函数 + load + main

+load

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

c++

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

镜像内的 c++方法 晚于 +load执行,objc镜像内的 c++方法 早于 +load执行 最后main

在这里插入图片描述

类加载主干流程总结

在这里插入图片描述

_dyld_objc_notify_register 之前,执行 static_init()

也就是objc镜像内的 attribute((constructor)) 修饰的c++函数会先执行

load_images 执行之后 -> doModInitFunctions, 执行 目标镜像 attribute((constructor)) 修饰的c++函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值