【iOS底层】12:dyld应用程序加载

本文详细探讨了iOS应用程序的加载流程,重点解析了dyld动态链接器的角色。从库的概念和类型开始,逐步分析dyld如何加载库,特别是dyld的dyldbootstrap::start和_main函数。接着,文章深入到initializeMainExecutable()和image初始化流程,揭示了Mach-O文件的loadCommands在动态链接过程中的作用。最后,通过反向追踪,梳理了从libdispatch到libSystem的初始化路径,完整展现了dyld如何一步步加载和初始化程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:从这篇起我们探索下应用程序的加载流程~

一、库

1.库:可执行的二进制文件,能够被系统加载到内存中。

常规的就是静态库(.a等),动态库(.dylib等)。

静态链接:可能重复加载

动态链接:对内存有优化

2.可执行文件拖入终端可运行。

二、库的加载

1.先认识下dyld~

dyld(the dynamic link editor)是苹果的动态链接器,是苹果操作系统一个重要组成部分,在系统内核做好程序准备工作之后,交由dyld负责余下的工作。

2.创建一个新iOS工程,在main函数开始的地方打个断点,运行看看

发现堆栈是从start开始的,点击查看start

是来自libdyld.dylib的start。

打个符号断点start后发现并不能断住start,那么在main函数之前iOS工程会执行load方法,在load方法里打个断点看看。

断住了,再来lldb中bt命令查看下堆栈

可以看出是从dyld库开始的 ,然后load_images(镜像文件),就调起了load方法。接下来探索下dyld的加载流程,以及如何走到load_images加载镜像文件的~

三、dyld探索

dyld852源码打开,下载地址:传送门

打开dyld源码工程,全局搜索dyld_start

 可以看到调用的是dyldbootstrap::start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值