0%

基础提要:栈结构

ARM内存中的栈区域是满递减的,由高地址向低地址增长,SP指针始终指向最后一个压入栈的地址,即栈顶地址。如图所示:

阅读全文 »

题目(编程题:病毒)

小B最近对破解和程序攻击产生了兴趣,她迷上了病毒,然后可怕的事情发生了。不知道什么原因,可能是小B的技术水平还不够高,小B编写的病毒程序在攻击一个服务器时出现了问题。尽管成功的入侵了服务器,但并没有按照期望的方式发挥作用。

小B的目的很简单:控制服务器内存区域,试图在内存中装入从1到n之间的n个自然数,以覆盖内存区域。可能是小B对编程理解上的问题,病毒似乎没有完全成功。可能是由于保护机制的原因,内存写入只接受二进制的形式,所以十进制表达中除了0和1之外的其他值都没有成功写入内存。小B希望知道,究竟有多少数成功的写入了服务器的内存!

阅读全文 »

栈与堆

首先,我们需要知道:为什么只有Objective-C对象需要进行内存管理,而其它非对象类型(如基本数据类型)不需要我们来管理呢?

因为: Objective-C 的对象在内存中是以堆的方式分配空间的

  • 堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存
  • OC对象存放于堆里面(堆内存要程序员手动回收,也就是 release )
  • 非OC对象一般放在栈里面(栈内存会被系统自动回收)
阅读全文 »

摘要

你所了解到的关于 iOS 内核堆利用的公开研究,最终都可以归结于对内核堆空间的分配,这个观点由 nemo 首先提出来。总而言之,这种分配将空间内的内核内存分成相同大小的内存块。通过利用重写堆元数据,可以向空间的空闲列表 (freelist) 中注入任意内存区。

阅读全文 »