为了不至于分析链条发生断层,请参阅ios应用程序加载分析(一)

_dyld_objc_notify_register ---- sNotifyObjcInit 是如何关联上的

sNotifyObjcInit 分析源头



以上源码出自于dyld

上一段源码出自于libobjc, libdyld与libobjc通过_dyld_objc_notify_register架起桥梁


回到加载流程图


与 libSystem_initializer 衔接上,此时缺口补上

map_images()镜像文件类的信息 class ro rw protocols 处理

根据以上分析得到句柄出处 sNotifyObjcInit

arr_init()

  • SideTablesMap.init(); 初始化散列表

  • _objc_associations_init(); 关联对象管理 初始化

  • startWeakTableScan(); 扫描若引用

修复selector

Fix up old objc_msgSend_fixup call sites

实现 (有实现+load方法)的类

load_images() load方法 - c++函数 + load + main

+load


c++


镜像内的 c++方法 晚于 +load执行,objc镜像内的 c++方法 早于 +load执行 最后main

类加载主干流程总结

_dyld_objc_notify_register 之前,执行 static_init()

也就是objc镜像内的 attribute((constructor)) 修饰的c++函数会先执行

load_images 执行之后 -> doModInitFunctions, 执行 目标镜像 attribute((constructor)) 修饰的c++函数

ios应用程序加载分析(二)相关推荐

  1. ios应用程序加载分析(一)

    app启动分析+猜测 首先通过入口函数main断点查看 nothing ... 通过load入口断点查看 得到大致的堆栈关键信息 (反向调用信息如下) dyld - _dyld_start dyld ...

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

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

  3. iOS进阶之底层原理-应用程序加载(dyld加载流程、类与分类的加载)

    iOS应用程序的入口是main函数,那么main函数之前系统做了什么呢? 我们定义一个类方法load,打断点,查看栈进程,我们发现dyld做了很多事,接下来就来探究到底dyld做了什么. 什么是dyl ...

  4. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(二)

    此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于串口的程序加载和烧写,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手册的阅读,欢迎阅 ...

  5. CANoe软件使用(二)——数据加载分析

    CANoe软件使用(二)--数据加载分析 目录 新建CANoe工程 DBC和通道加载 数据分析 离线设置 数据查看 数据保存 目录 本节主要讲述下离线的CAN数据分析.通常情况下,工程师通过CANoe ...

  6. 借由ARM CORTEX-M芯片分析C程序加载和存储模型

    https://zhuanlan.zhihu.com/p/22048373 写文章 借由ARM CORTEX-M芯片分析C程序加载和存储模型 王小军 1 年前 阿军最近在忙着血氧手环嵌入式系统的技术预 ...

  7. android隐私违规获取问题处理 及 Hook拦截处理记录 (VirtualXposted/epic等)及 android/iOS 多bundle加载方式修复方案

    文章目录 1.如何检测/复现 android_id/Mac地址等权限被超前获取 ```但是,检测机构是如何检测我们的APP?``` 关于hooklogin插件 太极 ---- 以上基础工作完成---- ...

  8. Sideloady 下载安装使用教程,将各种的应用程序加载到你的 iPhone、iPad 或 Mac 上

    Sideloady 是一款适用于 macOS 和 Windows 的免费应用程序,它的工作方式几乎与 Cydia Impactor 相同,但具有更多选项.更漂亮的用户界面并支持免费的 Apple 开发 ...

  9. 【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行

    上一篇文章学习了以下内容: 用一种不同的分段方法,从另一个不同的的角度理解处理器的分段内存访问机制 使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章:点击链接查看 对于主引导扇区部分 ...

最新文章

  1. 人工智能元老痛批IBM:沃森是个骗局,这根本不是认知
  2. 【迁移2018-04-12 10:46:11】BeanCopier之MapStruct(一)
  3. html网页访问WebAPI中的方法遇到的问题
  4. springboot——kaptcha
  5. scrapy学习笔记(二)进阶使用
  6. 顺丰物流单号查询效果(可输入多个文本框)
  7. 【今日CV 视觉论文速览】21 Nov 2018
  8. DOCX是什么格式文件
  9. go Mutex (互斥锁)和RWMutex(读写锁)
  10. 【恋上数据结构】排序算法大全
  11. python课程-天津Python编程课程
  12. kafka学习_kafka学习(第一章 初识kafka)
  13. ActiveMQ 持久化
  14. 2017最新App Store 审核指南中文版
  15. 各种开源数据库同步工具汇总
  16. 关于 类的常成员函数 声明和定义处 都需要加 const的原因
  17. Altium Designer PCB 插入图片logo的方法
  18. 没有功德的人就在眼前--我看到了“裸男”
  19. 无需Avatarify 无需剪辑工具 一键生成多人版 “蚂蚁呀嘿“视频
  20. elasticsearch从入门到入门系列(四)---搜索高级使用

热门文章

  1. 2022-2027年中国农村网络零售行业市场深度分析及投资战略规划报告
  2. 计算机人物系列-约翰·冯·诺依曼
  3. 如何构建用户行为分析系统?
  4. 推荐:5款可以教你编程的游戏
  5. MySQL快速生成大量测试数据(100万、1000万、1亿)
  6. aoa定位算法matlab仿真,基于信号到达角度(AOA)的定位算法研究
  7. 从零开始搭建Node.js, Express, Ejs, Mongodb服务器
  8. android瀑布流布局源码,GitHub - dodola/android_waterfall: Android版的瀑布流布局
  9. Ajax实现网页部分更新
  10. jQuery对Ajax的升级简化