美文网首页
第九篇:Dyld流程及Mach-o文件介绍

第九篇:Dyld流程及Mach-o文件介绍

作者: 坚持才会看到希望 | 来源:发表于2022-05-11 18:37 被阅读0次

1.mach-o 是一种文件格式,也可以说是可执行 ,目标文件,静态库,动态库dyld

2.dyld就是一个动态的链接器

3.链接 -- 静态链接 -- 和动态链接

4.静态库本质是一群.o文件的集合

5.动态库本质是一个已经链接完全的镜像image,image可以用来 表现任意类型的可执行文件

6.app启动的时候首先是调用exec这个文件的 --> app对应的可执行文件加载进内存 --> dyld加载到内存 --> dyld进行动态链接

7.dyld就是先会加载动态库-->rebase bingding -- >调起main函数,加载动态库就会进行一个 动态库和可执行文件的初始化,然后调用libsystem-->libdispatch-->libobjc-->_dylb_objc_notify_register(&map_images,load_images,unmap_image). 在这里为什么load方法在mian函数之前运行就是因为这个传递过去的load_images方法。load_images就是一个镜像文件,我们corefoundation框架就可以看成,runtime也可以成。map_images 和load_images是关于类的加载用到的。

8.dyld加载的流程图


WechatIMG1961.jpeg
WechatIMG1962.jpeg

总结:
在启动App时,真正的加载过程是从exec()函数开始,系统会调⽤exec()函数创建进程,并且分配
内存。然后会执⾏以下的操作

  1. 把App对应的可执⾏⽂件加载到内存。
  2. 把dyld加载到内存。dyld也是⼀个可执⾏的程序
  3. dyld进⾏动态链接。
    dyld的具体⼯作内容
  4. dyld会找到可执⾏⽂件的依赖动态库。接着dyld会将所依赖的动态库加载到内存中。这是⼀个
    递归的过程,依赖的动态库可能还会依赖别的动态库,所以dyld会递归每个动态库,直⾄所有
    的依赖库都被加载完毕。
  5. Rebase和Bind。rebase修复的是指向当前镜像内部的资源指针;⽽bind指向的是镜像外部的
    资源指针
  6. 调起main函数,也就是我们程序的⼊⼝,然后我们的程序就开始执⾏了。
    dyld进⾏初始化的流程
    dyld是⽤来加载可执⾏⽂件所依赖的动态库的。然后会对可执⾏⽂件和可执⾏⽂件所依赖的动态库
    进⾏初始化的操作。
    在进⾏初始化的操作的时候⾸先会初始化libsystem,否则就会报错。因为在进⾏libsystem初始化
    的时候,会初始化libdispatch,在进⾏libdispatch初始化的时候,会初始化libobjc,其他的库,可
    能需要依赖runtime基础或者线程相关的基础。所以libsystem的初始化必须放在第⼀位。
    在libobjc进⾏初始化的时候,会调⽤⼀个_dyld_objc_notify_register函数,这个函数会给dyld传递
    三个回调函数。
  7. map_images: dyld将image镜像⽂件加载进内存时,会触发该函数
  8. load_images: dyld初始化image会触发该函数
  9. unmap_image: dyld将image移除时会触发该函数
    然后,dyld会调⽤ map_images 和 load_images 来对image进⾏初始化的操作。

相关文章

  • 第九篇:Dyld流程及Mach-o文件介绍

    1.mach-o 是一种文件格式,也可以说是可执行 ,目标文件,静态库,动态库dyld 2.dyld就是一个动态...

  • Mach-O文件介绍及dyld加载流程

    什么是Mach-O文件? Mach-O文件是Mach object文件的缩写,它在NeXTSTEP.MacOS,i...

  • 6.MachO

    MachO文件 MachO文件 MachO文件结构 DYLD Mach-O其实是Mach Object文件格式的缩...

  • iOS Crash从捕获到符号化解析分析

    目的 探索iOS Crash分类及捕获流程 了解Crash文件结构及段含义 了解Mach-o文件结构 分析Cras...

  • DYLD

    一、dyld dyld (动态库加载器),负责加载程序和程序所以依赖的动态库。内核读取 Mach-O 文件后将读取...

  • dyld源码解读

    前言 dyld全称the dynamic link editor,即动态链接器,其本质是Mach-O文件,他是专门...

  • 越狱相关的计算机基础知识

    编程语言分类 现代编译器工作流程 Mach-O文件格式 应用程序数字签名技术 文件系统介绍 用户权限介绍

  • 重学iOS系列之APP启动(四)Mach-O

    前文讲解了dyld加载Mach-O的用户态过程,大家都知道Mach-O代表的是苹果系统的可执行文件,那你们了解Ma...

  • dyld

    dyld用于加载以下Mach-O文件类型 MH_EXECUTE MH_DYLIB MH_BUNDLE APP的可执...

  • fishhook x MachOView源码阅读

    1. fishhook源码阅读 1.1 fishhok原理 dyld通过更新Mach-O二进制文件中特定__DAT...

网友评论

      本文标题:第九篇:Dyld流程及Mach-o文件介绍

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