系统的内存管理
2020-08-17 本文已影响0人
HelloBinary
物理地址
物理设备的真实内存地址,早期的电脑就是使用直接使用物理内存进行内存管理,为了解决多个应用内存过快使用完的问题,工程师们设计一套方案,将这个应用有用到的部分加载到系统内存中,如果我们开启两个应用qq和微信,那么这两个应用在系统内存中根据需要开辟相应的内存空间。
内存分页:一个应用(IOS中就是MACH-O文件)加载到内存空间不是全部一次性加入的,系统会智能的选择需要加载的那部分进入内存,也就是内存分页.IOS中一页的容量是16KB。如图一所示。假设俩个应用的内存总共分成5份,那么程序运行过程中就会把他们中活跃的那部分加载进 内存。当然如果不断的打开内存,也会出现内存不足的情况,这时候就会用当前需要的内存覆盖不活跃的内存。
图一物理内存分配涉及一个内存的安全访问问题,由于是物理内存,所以其中的一个应用可以通过物理地址访问和篡改另外一个应用的数据,类似早期的数据修改外挂(金山游侠)。
所以针对这种安全问题,虚拟内存技术被提了出来。
虚拟内存技术
系统为每一个应用分配了4个g的内存空间,虚拟内存地址通过页表来和物理地址进行映射。页表中存储了这个应用的所有地址信息(0~4g)。
图二
由于虚拟内存的地址都是从0~4g,所以也存在重大的安全隐患。我们可以通过对mach-o文件进行分析,可得到所有的变量和函数的偏移地址,很容易就可以对数据进行篡改。
ASLR address space layout randomization(地址随机化)
ASLR是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化.
每次加载应用系统在对这个分配一个进程的同时,也会分配一个随机值,所以当前的地址的偏移量 需要加上这个随机值。