iOS启动优化-1

源码 2024-10-5 07:06:00 100 0 来自 中国
启动优化根本概念1

假造内存 & 物理内存

早期的数据访问是直接通过物理地址访问的,这种方式有以下两个题目:

  • 1、内存不够用
  • 2、内存数据的安全题目
内存不够用的方案:假造内存

针对题目1,我们在进程和物理内存之间增长一个中央层,这个中央层就是所谓的假造内存,告急用于办理当多个进程同时存在时,对物理内存的管理。提高了CPU的利用率,使多个进程可以同时、按需加载。以是假造内存其本质就是一张假造地址和物理地址对应关系的映射表

  • 每个进程都有一个独立的假造内存,其地址都是从0开始,大小是4G固定的,每个假造内存又会分别为一个一个的页(页的大小在iOS中是16K,其他的是4K),每次加载都是以页为单元加载的,进程间是无法相互访问的,包管了进程间数据的安全性。
  • 当CPU须要访问数据时,起首是访问假造内存,然后通过假造内存去寻址(MMU翻译假造内存地址),接着在共享缓存中找对应的物理地址,然后对相应的物理地址举行访问
  • 如果在访问时,假造地址的内容未加载到物理内存,会发生缺页非常(pagefault),将当进步程壅闭掉,此时须要先将数据载入到物理内存,然后再寻址,举行读取。如许就避免了内存浪费
如下图所示,假造内存与物理内存间的关系
内存数据的安全题目:ASLR技能

在上面表明的假造内存中,我们提到了假造内存的起始地址与大小都是固定的,这意味着,当我们访问时,其数据的地址也是固定的,这会导致我们的数据非常容易被破解,为了办理这个题目,以是苹果为了办理这个题目,在iOS4.3开始引入了ASLR技能。
ASLR的概念:(Address Space Layout Randomization ) 地址空间设置随机加载,是一种针对缓冲区溢出的安全掩护技能,通过对堆、栈、共享库映射等线性区结构的随机化,通过增长攻击者猜测目的地址的难度,防止攻击者直接定位攻击代码位置,达到克制溢出攻击的目的的一种技能。
其目的的通过利用随机方式设置数据地址空间,使某些敏感数据(比方APP登录注册、付出相关代码)设置到一个恶意步调无法事先获知的地址,令攻击者难以举行攻击。
由于ASLR的存在,导致可实行文件和动态链接库在假造内存中的加载地址每次启动都不固定,以是须要在编译时来修复镜像中的资源指针,来指向精确的地址。即精确的内存地址 = ASLR地址 + 偏移值
可实行文件

差别的利用体系,其可实行文件的格式也差别。体系内核将可实行文件读取到内存,然后根据可实行文件的头署名(magic魔数)判断二进制文件的格式
2.png 此中PE、ELF、Mach-O这三种可实行文件格式都是COFF(Command file format)格式的变种,COFF的告急贡献是目的文件内里引入了“段”的机制,差别的目的文件可以拥有差别数量和差别范例的“段”。
通用二进制文件

由于差别CPU平台支持的指令差别,比如arm64和x86,苹果中的通用二进制格式就是将多种架构的Mach-O文件打包在一起,然后体系根据自己的CPU平台,选择合适的Mach-O,以是通用二进制格式也被称为胖二进制格式,如下图所示
3.png 通用二进制格式的界说在<mach-o/fat.h>中,可以在下载xnu,然后根据xun -> EXTERNAL_HEADERS ->mach-o中找到该文件,通用二进制文件开始的Fat Header是fat_header结构体,而Fat Archs是表现通用二进制文件中有多少个Mach-O,单个Mach-O的形貌是通过fat_arch结构体。两个结构体的界说如下
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 16:15, Processed in 0.148051 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表