Perl-users.jp

Perl を Crash させたい。そんな欲求を抑えきれないあなたのために、いくつかの方法を教えよう。

いろいろな crash

unpack で不正アクセス

perl -e 'unpack "p",0xdeadbeef'

pack において 'p' は A pointer to a null-terminated string. を意味する。不正なメモリ領域にアクセスすれば死ぬのはあたりまえである。

overload の中で再帰する

perl -e 'use overload q{""}=>sub{"$_[0]"};$a=bless{},main;"$a"'

overload の stringify させる部分などで無限ループにおちいると、segv する。

このバグは昔から知られており、ticket が切られているが、なおっていない。

@INC の中の coderef で再帰する

perl -E '$INC[0]=sub {die require B};require B'

@INC の中に coderef を入れると便利なのはみなさんご承知のとおりだが、この部分で再帰的に require すると segv する。

dl_unload_file

perl -E 'use Encode; DynaLoader::dl_unload_file($_) for @DynaLoader::dl_librefs; encode('euc-jp', 'abcde');'

DynaLoader::dl_unload_file() して開放したあとに使おうとすると SEGV

@_ をいじってから goto

これは Perl5.8.4 以前に存在する有名な問題だが最新版ではなおっているので、とりあげない。

総括

意外と perl を segv させるのはむずかしい。微妙なところで再帰させるというのが一番容易だといえよう。


目次へ

Last modified: $Date: 2008-10-26T05:38:56.231052Z $