dyld(dynamicLinkEditor)加载流程(底层指令分析)

.cpp(c plus plus/c++)单元文件即c++体系下的单元文件。
dyld(the dynamic link editor)是苹果体系的动态链接器,是苹果体系的操作系统重要组成部分,在系统内核做好程序准备相关的工作之后,接下来触发dyld动态链接器即由dyld负责余下的业务工作的处理分析响应反馈。动态链接编译器是开源的,动态链接编译器相关涉及到的源代码苹果官方对外公开。任何人可以通过苹果官网下载动态链接编译器的源码自己来阅读理解底层运作方式,了解系统加载动态库的细节。识别:分析并响应回馈。

编译过程
待编译源文件:载入.h、.m、.cpp等源码文件(定义声明、措施执行、c++)
正式编译前预处理:宏替换为某段指令码(供后期正式编译)、删除注释文档、展开头文件、产生.i文件(.i文件是预编译后生成的文件,一般是头文件包含、进行宏替换后生成的i文件)
编译:将.i文件转换为汇编语言,产生.s文件
汇编:将汇编.s文件转换为.o输出端机器码文件,产生.o文件
链接:对.o输出端机器码文件中涉及其他库引用的地方进行正式引用载入,三方库引用载入完成后生成最后的可执行.exe文件
在这里插入图片描述
分析dyld源码的加载执行走势流程
dyld::_main主编译函数源码分析
进入dyld::_main主编译函数源码的实现大约600多行,可根据_main主编译函数的返回值进行反推dyld加载流程。在_main主编译函数中主要做几件事情:
【第一步:环境变量配置】:根据环境的状态配置环境变量下相应的条件判断状态值及获取当前运行架构
在这里插入图片描述
【第二步:共享缓存解析处理】:检查是否开启了共享缓存及共享缓存是否映射到共享区域,例如UIKit、CoreFoundation等

在这里插入图片描述
【第三步:主程序初始化】:调用instantiateFromLoadedImage函数实例化出一个ImageLoader对象
在这里插入图片描述
【第四步:插入动态库】:遍历环境变量DYLD_INSERT_LIBRARIES待插入动态库表容器组,调用loadInsertedDylib加载引入
在这里插入图片描述
【第五步:link主程序】
在这里插入图片描述
【第六步:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HaiJunYa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值