私は、読み込み/書き込み/飛ばしたアドレス、すなわち、linux: "本当の"セグメンテーションフォルトハンドラはどこですか?
.text
.global _start
_start:
movl $1,%edx
jmp *%edx
これはセグメンテーション違反を引き起こします。
システム(カーネル) の実際の部分は、マップされていないアドレスへの読み取り/書き込みをインターセプトするものですか?( ) "ユーザーモード"シグナルをスローしますか?
私は、読み込み/書き込み/飛ばしたアドレス、すなわち、linux: "本当の"セグメンテーションフォルトハンドラはどこですか?
.text
.global _start
_start:
movl $1,%edx
jmp *%edx
これはセグメンテーション違反を引き起こします。
システム(カーネル) の実際の部分は、マップされていないアドレスへの読み取り/書き込みをインターセプトするものですか?( ) "ユーザーモード"シグナルをスローしますか?
すべてがアーキテクチャのトラップテーブルから流れ。これは通常entry.Sと呼ばれ(entry_32とentry_64.Sの間のx86上で分割されます)、適切なカーネルのCコードに入る前にいくつかのこと(configに依存します)を行うアセンブラリンケージを持っています。
無効なメモリアクセスは、page_faultまたはgeneral_protectionのどちらかを使用して入力する必要があります。最後にsend_signal(kernel/signal.c)のユーザースペースにキューイングされる前にforce_sig_infoが終了する可能性があります。
これは、異なるアーキテクチャ向けに実装されています。 は例えば、x86上で、あなたがでソースをチェックすることができます。
do_page_fault: linux/arch/x86/mm/fault.c
ページフォールトとセグメンテーションフォールトは全く異なるものです。 – SoapBox
「ブックE」ではないPowerPCチップ(組み込みシステム用の最近のチップなど)では、セグメンテーションフォルトは例外0x300(データ用)または0x400(命令用)から始まります。ユーザー/スーパーバイザモードフラグはスーパバイザに設定すると、MMUはオフになり、CPUはアドレス0x300または0x400にジャンプし、オペレーティングシステムを制御します。
ハードウェアサポートがあり、おそらくhttp://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protectionここでは、割り込みハンドラを探すべきでしょうか? – wds