* freeのセキュリティチェック -(by [[K]], 2013.08.23) ** (0) これはなに? -これは[[K]]のメモをただ公開しているだけです。あまり気にしないでください。 ** (1) チェックリスト -(a) mallocしていないアドレスに対してfreeしたら、SE(セキュリティ例外)にしなければいけない。 --p=malloc(...); p++; free(p); みたいなものももちろん検出できる。 --ポインタは簡単にmalloc時の先頭アドレスを引けるから、それとpが一致していなければSEにしてしまえばいい。 -(b) 既にfreeされているアドレスに対してfreeしたらSEにしなければいけない。 --liveSignを見ればできる。 -(c) 関数のポインタはfreeできない。プログラムラベルなども同様。コード内のdataセクションもfreeできない。これらをfreeするにはjitcの制御APIを使う。 -(c) 関数のポインタはfreeできない。プログラムラベルなども同様。コード内のdataセクションもfreeできない。・・・っていうかmallocで得たものではないから当然か。・・・これらをfreeするにはjitcの制御APIを使う。 ** (2) やらないリスト -(A) p++とかでpがずらされていても、システムはmalloc時の先頭アドレスを知っているので、気を利かせてfreeを完了させることはその気になればできるが、それはしない。なぜならセキュリティをOFFにできなくなるから。 ** (3) メモ -なんだ結構簡単そうだな・・・まずは未完のliveSignからかな。 -- ''K'' SIZE(10){2013-08-23 (金) 11:29:03} -C言語と同様にNULLをfreeしたときには何もしないことにしよう。 -- ''K'' SIZE(10){2013-08-23 (金) 11:47:35} #comment * こめんと欄 #comment