[Perl] PerlをCrashさせる方法ーPerl-users.jpより

Perl-users.jpで有用な記事があったので、メモっておく。


http://perl-users.jp/articles/crashing_perl.htm


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 させるのはむずかしい。微妙なところで再帰させるというのが一番容易だといえよう。
l

SEGVした場合の挙動を調べる時に使ってます(^-^;)

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

面白い

この記事へのコメント

この記事へのトラックバック