アカウント名:
パスワード:
>まともなOSとCPUはこれを検知してSIGSEGVを発行する。
OSがレジスタ監視してたらそれって効率低下とかならないんですか?この辺の知識まったくないので、結構驚きました。
そういうfaultが発生したときのシステムの挙動ってどうなるの?
1.CPUは動作を停止する2.CPUはエラーの割り込み発生するが、実は割り込み処理のコードが無くてreturnで戻ってくるだけ3.ちゃんと割り込み処理のコードがあってOSはエラー発生を検知するが、リカバリーの処理はしない(ログを取るだけ)4.OSは割り込みを検知したら、アプリケーションレベルでの何らかの誤り訂正等の処理をする
たぶん3か4じゃないかと思うのだが......
例外の種類とOSによる。
管理領域違反とかは、カーネルに処理が戻った時にレジスタとかバックトレースだけ回収して問答無用でアプリケーションを落とすのが普通。組み込みとかだと、例外通知だけして復帰も有り得るかもしれん。
多分一番身近な例外は、キャッシュミス(TLBミス)とかページフォルトで、この場合はカーネル側でデータのロードを行って、そのまま処理に戻るのが普通。
例外(シグナル)を捕捉する処理をアプリケーションが持ってればそこに飛んでくだけで、メモリアクセス程度では問答無用でアプリケーションを落とすような事は少ないですよ。例外を捕捉しない場合もOS等の提供するデフォルトの例外処理が自殺なだけの事も多い。
管理領域違反つってんのに…
例えばCで*((int*)rand())=0;すると例外処理してても強制終了される場合があるという主張ですか?ユーザモードのメモリ空間にはカーネルモードのアクセス禁止なデータなんてマップされませんよ。マップ済みならアクセスフラグに違反したら例外出るけど補足できるし、未マップ領域は当然例外で補足できます。
たとえ乱数で埋まった不正命令まみれのメモリ領域にジャンプしても、例外機構自体を破壊したり強制終了処理を呼ばなければまず落ちませんて。
敢えてユーザ空間にマップしといてアプリの例外処理に飛ぶ前に握りつぶすOSはあるのかもしれませんが、どの道アクセス出来ないのは変わらないし悪意の立証も出来ない。意地が悪いだけで意味が無いでしょう。
だから例外の種類とOSによる、って書いてあるのに(俺が書いたんじゃないが)、なんでunixのモデルから頭が離れられないの
>そういうfaultが発生したときのシステムの挙動ってどうなるの?
SIGSEGV。
底抜けに親切な御仁だ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家
OSってレジスタ監視してんだ。 (スコア:0)
>まともなOSとCPUはこれを検知してSIGSEGVを発行する。
OSがレジスタ監視してたらそれって効率低下とかならないんですか?
この辺の知識まったくないので、結構驚きました。
Re:OSってレジスタ監視してんだ。 (スコア:3, 参考になる)
Re: (スコア:0)
そういうfaultが発生したときのシステムの挙動ってどうなるの?
1.CPUは動作を停止する
2.CPUはエラーの割り込み発生するが、実は割り込み処理のコードが無くてreturnで戻ってくるだけ
3.ちゃんと割り込み処理のコードがあってOSはエラー発生を検知するが、リカバリーの処理はしない(ログを取るだけ)
4.OSは割り込みを検知したら、アプリケーションレベルでの何らかの誤り訂正等の処理をする
たぶん3か4じゃないかと思うのだが......
Re:OSってレジスタ監視してんだ。 (スコア:1)
例外の種類とOSによる。
管理領域違反とかは、カーネルに処理が戻った時にレジスタとかバックトレースだけ回収して問答無用でアプリケーションを落とすのが普通。
組み込みとかだと、例外通知だけして復帰も有り得るかもしれん。
多分一番身近な例外は、キャッシュミス(TLBミス)とかページフォルトで、この場合はカーネル側でデータのロードを行って、そのまま処理に戻るのが普通。
Re: (スコア:0)
例外(シグナル)を捕捉する処理をアプリケーションが持ってればそこに飛んでくだけで、
メモリアクセス程度では問答無用でアプリケーションを落とすような事は少ないですよ。
例外を捕捉しない場合もOS等の提供するデフォルトの例外処理が自殺なだけの事も多い。
Re: (スコア:0)
管理領域違反つってんのに…
Re: (スコア:0)
例えばCで*((int*)rand())=0;すると例外処理してても強制終了される場合があるという主張ですか?
ユーザモードのメモリ空間にはカーネルモードのアクセス禁止なデータなんてマップされませんよ。
マップ済みならアクセスフラグに違反したら例外出るけど補足できるし、未マップ領域は当然例外で補足できます。
たとえ乱数で埋まった不正命令まみれのメモリ領域にジャンプしても、
例外機構自体を破壊したり強制終了処理を呼ばなければまず落ちませんて。
敢えてユーザ空間にマップしといてアプリの例外処理に飛ぶ前に握りつぶすOSはあるのかもしれませんが、
どの道アクセス出来ないのは変わらないし悪意の立証も出来ない。意地が悪いだけで意味が無いでしょう。
Re: (スコア:0)
だから例外の種類とOSによる、って書いてあるのに(俺が書いたんじゃないが)、なんでunixのモデルから頭が離れられないの
Re: (スコア:0)
>そういうfaultが発生したときのシステムの挙動ってどうなるの?
SIGSEGV。
Re:OSってレジスタ監視してんだ。 (スコア:1)
底抜けに親切な御仁だ