1.回顾

在上一篇博文中介绍了动态库静态库的区别,对dyld动态链接器做了初步的探索分析,本篇博文就进一步的对dyld的源码进行分析。

2. MachO

在上篇文章中,已经找到了dyld的入口了,但是在分析源码之前,还得补充点内容。

在iOS中Mach-O(可执行文件)怎么获取呢?

2.1 macOS工程查看MachO

直接编译运行之后就可以得到Mach-O,就是下面这个黑不溜秋的东西。

2.2 iOS工程查看MachO

iOS工程的话就需要找到Products里面的.app文件

然后Show in Finder找到文件所在位置

同样这个黑不溜秋的就是MachO可执行文件

2.3 MachOView查看MachO结构

把这个MachO文件,拖拽到MachOView里面就可以查看MachO的结构。

  • Header 头部,包含可以执行的CPU架构,比如x86,arm64
  • Load commands 加载命令,包含文件的组织架构和在虚拟内存中的布局方式
  • Data,数据,包含load commands中需要的各个段(segment)的数据,每一个Segment都得大小是Page的整数倍。

3. dyld 源码分析

3.1 dyld::_main

dyld的入口main函数,好家伙!我直呼好家伙啊!近千行的代码!

这太长了,代码就不贴出来了,一贴出来,本篇博文基本就结束了,太TM长了

iOS底层探索之dyld(下):动态链接器流程源码分析相关推荐

  1. SpringBoot配置外部Tomcat项目启动流程源码分析(下)

    前言 SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂.故而我们可以使用习惯的外置Tomcat方式 ...

  2. iOS 底层探索 - 消息转发

    一.动态方法解析流程分析 我们在上一章<消息查找>分析到了动态方法解析,为了更好的掌握具体的流程,我们接下来直接进行源码追踪. 我们先来到 _class_resolveMethod 方法, ...

  3. iOS底层原理之dyld应用程序加载

    前言 众所周知,main作为程序的入口,但是在它之前发生了什么?有点好奇,让我们来瞅一瞅: 一.准备工作 1.代码 __attribute__((constructor)) void Func(){p ...

  4. iOS底层探索(二) - 写给小白看的Clang编译过程原理

    iOS底层探索(一) - 从零开始认识Clang与LLVM 写在前面 编译器是属于底层知识,在日常开发中少有涉及,但在我的印象中,越接近底层是越需要编程基本功,也是越复杂的.但要想提升技术却始终绕不开 ...

  5. mysql实现程序的动态链接_程序的链接和装入及Linux下动态链接的实现

    链接器和装入器的基本工作原理 一个程序要想在内存中运行,除了编译之外还要经过链接和装入这两个步骤.从程序员的角度来看,引入这两个步骤带来的好处就是可以直接在程序中使用printf和errno这种有意义 ...

  6. iOS 底层探索篇 —— KVC 底层原理

    iOS 底层探索篇 -- KVC 底层原理 1. Method Swizzling的坑与应用 1.1 method-swizzling 是什么? 1.2 坑点 坑点1:method-swizzling ...

  7. iOS底层探索二(OC 中 alloc 方法 初探)

    前言 相关文章: iOS底层探索一(底层探索方法) iOS底层探索三(内存对齐与calloc分析) iOS底层探索四(isa初探-联合体,位域,内存优化) iOS底层探索五(isa与类的关系) iOS ...

  8. Windows下动态链接之二:DLL优化加速

    1. Windows动态链接下的导入函数的调用过程 在ELF结构下,函数调用因为 有全局符号介入的可能,所以除非用static关键词修饰,否则只要是函数调用,无论是否是模块内还是模块外,都需要经过.g ...

  9. 视频教程-iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-iOS

    iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化 小码哥教育CEO,曾开发了2个iOS的流行开源框架(MJRefresh.MJExtension),目前在国内的使用率非常高. 李 ...

  10. iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-李明杰-专题视频课程...

    iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-236人已学习 课程介绍         得遇名师,突飞猛进!iOS培训王者MJ(李明杰)老师精心研发,iOS进阶课程,实用技术 ...

最新文章

  1. 华为、小米的新手机用了更多AI,到底谁更胜一筹?
  2. 【QwQ】乱七八糟的置顶
  3. 面试题总结15 自己构建一个哈希表
  4. mysql or走索引吗_加了索引,mysql查询就一定会用吗?
  5. 【端午送福】13000 人正在学习的数据分析实战课,抽奖送送送!
  6. educoder实训平台python入门之运算符的使用_从零学Python之入门(四)运算
  7. UnityShader2:Shader与材质
  8. SSH 连接、远程上传下载文件
  9. 二进制数的算术运算和逻辑运算
  10. (亲测)使用cmd结束进程的3种方法
  11. 狂神 MyBatis
  12. android星星闪效果,H5使用canvas实现星星闪烁效果
  13. RK 3568 IDB烧录失败解决方法
  14. mysql virt虚拟内存_Java 进程占用VIRT虚拟内存超高的问题
  15. 开机后, 小键盘的灯不亮的解决方法
  16. 【CANN训练营第三季】【进阶班笔记3】PyTorch安装与环境配置
  17. D. Frog Traveler
  18. 大数据周会-本周学习内容总结03
  19. 蓝桥杯官网刷题记录python
  20. 自行车租借管理系统c语言,校园自行车管理系统.doc

热门文章

  1. Axios 请求配置参数详解
  2. 10分钟搞定webpack打包
  3. HDU 4417 划分树写法
  4. python学习笔记——叁之修改配置文件
  5. MVC在Web框架中的应用
  6. matlab 按照某列以行为单位进行排序
  7. Silverlight WCF RIA服务(二十九)Silverlight 客户端 10
  8. java多线程(线程安全,线程同步)
  9. php获取并删除数组的第一个和最后一个元素
  10. java_函数的内存加载过程