セグフォらせる
hiroki.iconSEGVって言うけどなんでVなんだ??Fじゃないの
なぜ Segumentation Fault は SIGSEG'V' と表現するの?
セグフォ
セグメンテーションフォールト
不正なメモリアクセスでのエラー(読み書きどちらでも起こる)
アクセス禁止のメモリ領域にアクセスしようとした
OSを上書きしようとしたり
メモリ上の位置ごとに設定されているルールに違反してアクセスしようとした
リードオンリーへ書き込みしようとしたり
SIGSEGV(Linuxシグナル)
メモリの保護機構
プログラミング言語の一部のエラーではなくOS自体のエラー
→どのプログラミング言語でも発生する可能性はある
Javaみたいな明示的なメモリ管理を許可しない言語ではほぼ起きない
Perl
perl -e 'syscall 10,$m-=4096,4096,0 while$m||=1<<47'
システムコール10→mprotect
メモリ領域の保護属性を変更する。本プログラムでは読み書き実行全てを禁止している
→メモリアクセスした瞬間にSISSEGV
不正なメモリ領域にアクセスするのではなく、自プロセスのメモリ領域自体を不正に変更している
Perlを1行でセグフォらせる
C
*a;main(){*a=0;}
ポインタでメモリ番地0にアクセスする
メモリマップでは0番地周辺は使用しないことになっている
C言語で16文字でセグフォらせる