美文网首页i
iOS引用程序加载流程-dyld

iOS引用程序加载流程-dyld

作者: 麟枫_Jack | 来源:发表于2021-08-20 10:32 被阅读0次

一、应用程序加载原理

在分析dyld加载应用程序之前,先清楚以下基本概念。
库:可执行的二进制文件,可以被系统加载到内存。库分为静态库和动态库,动态和静态库的区别是链接的区别。

编译过程

image

源文件->预编译->编译->汇编->链接->可执行文件(MachO格式)。

动态库:动态链接。只会存在一份,在内存中共享。减少了包的体积大小。这里有完全动态特性的就是系统的动态库了。
静态库:静态链接。静态库在装载的时候会重复,浪费了空间。

那么这些库是怎么加载到内存中的呢?
是通过dyld动态链接器加载到内存中的。整个过程大概如下:

image

dyldthe dynamic link editor)动态链接器,是苹果操作系统一个重要组成部分,在系统内核做好程序准备工作之后交由dyld负责余下的工作。
这篇文章将详细分析整个dyld加载过程。

二、dyld 初探

既然是dyld加载的库,那么在加载完成后肯定会进入main函数,那么在main函数上打个断点看下调用:

image

可以看到是libdyld.dylib start:调用的main函数。给start下个符号断点并没有进入断点。那么证明在底层的符号不是start。实现一个+ load方法打个断点发现如下调用栈:

image

可以看到是dyld _dyld_start发起的调用。opensoure上直接下载dyld-852源码。

搜索_dyld_start发现这个入口是在汇编中,其中主要是调用了dyldbootstrap::start

image

最终跳转了返回的LC_MAIN

也可以通过断点查看汇编调用确定:

image

dyldbootstrapc++的命名空间,start是其中的函数。搜索后发现dyldbootstrap::startdyldInitialization.cpp中,这也就是函数开始的地方。接下来结合源码分析怎么从start调用到loadmain方法,以及dyld是如何加载images的。

总结

dyld调用流程

image

核心点文字总结

image

相关文章

  • iOS引用程序加载流程-dyld

    一、应用程序加载原理 在分析dyld加载应用程序之前,先清楚以下基本概念。库:可执行的二进制文件,可以被系统加载到...

  • iOS dyld加载流程

    dyld加载的详细流程可以参考文章 iOS dyld加载流程[https://www.jianshu.com/p...

  • DYLD 动态链接器

    dyld加载流程 程序从_dyly_start开始 -> dyld`dyldbootstrap::start 进入...

  • dyld加载流程

    dyld加载流程 结合最新的DYLD开源库dyld-832.7.3。 程序开始于_dyld_start汇编函数--...

  • iOS程序加载流程—dyld流程

    本篇文章主要是探索程序启动流程。 load方法断点 首先我们来个简单程序 通过打印我们知道+load > c++构...

  • Dyld的加载流程分析

    引言: 众所周知,我们的iOS应用是通过Dyld进行加载的,那么Dyld是如何加载我们的应用的,它的流程是怎样的,...

  • iOS底层-dyld加载分析

    引言: 众所周知,我们的iOS应用是通过Dyld进行加载的,那么Dyld是如何加载我们的应用的,它的流程是怎样的,...

  • iOS 网址大全

    个人githubShawn博客 iOS 高级技术网址 iOS程序启动,dyld加载 objc 源码 OC keyw...

  • iOS应用加载流程

    在iOS领域我们谈应用加载流程,就不得不谈一下dyld。概述:DYLD(the dynamic link edit...

  • iOS 程序 main函数之前发生什么

    主要参考:iOS程序启动->dyld加载->runtime初始化 过程iOS 程序 main 函数之前发生了什么 ...

网友评论

    本文标题:iOS引用程序加载流程-dyld

    本文链接:https://www.haomeiwen.com/subject/eattiltx.html