IE在解釋表達(dá)式的時(shí)候顯然大有優(yōu)化的余地,F(xiàn)ireFox就沒(méi)這個(gè)毛病。下面這段小代碼可以輕松讓IE崩潰掉:
var n=32768;
var s=new Array(n).join("0+")+0;
if(confirm("真的要?dú)⒘藶g覽器嗎?")){
eval(s);
alert("殺不掉,試試把n調(diào)大一點(diǎn)?");
}
其實(shí)就是讓IE解析一個(gè)“0+0+0+0....”的表達(dá)式。
在我的機(jī)器上,IE6跑到32255就自動(dòng)關(guān)閉了(可以作為一個(gè)新的無(wú)提示關(guān)閉瀏覽器漏洞呵呵,會(huì)把同一個(gè)進(jìn)程打開(kāi)的全部窗口一起殺掉),IE7還要差些,在31515就掛了。opera也好不到哪里去,32180就崩潰了。而FireFox一直跑到2^27(ie和opera還不到2^15)的時(shí)候把我的內(nèi)存全吃光了,在虛擬內(nèi)存支持下還是可以執(zhí)行完成:
var s="0+",n=27 ;
for(var i=0;i<n;i++) s+=s;
alert(s.length/2)
s+=0;
if(confirm("真的要?dú)⒘藶g覽器嗎?")){
eval(s);
alert("殺不掉,試試把n調(diào)大一點(diǎn)?");
}
一直到2^28的時(shí)候,字符串構(gòu)造失敗了才罷休。