read()
システムコールを使用してHDDにアクセスするなど、ユーザ空間で許可されない機能へのアクセスを提供するシステムコールが存在することを理解しています。また、これらは、ハードウェア間の互換性を提供するために、fread()
などのライブラリ呼び出しの形式でユーザーモードレイヤーによって抽象化されていることも理解しています。Linuxシステムコールとカーネルモード
したがって、アプリケーション開発者の観点からは、何かが好きです。
//library //syscall //k_driver //device_driver
fread() -> read() -> k_read() -> d_read()
私の質問は、 fread()
とread()
のすべての命令をインライン展開するのを私のプログラムに直接止めるのは何ですか?命令は同じなので、CPUは同じように動作するはずです。私はそれを試していないが、私は何か理由でこれが動作しないと仮定します。さもなければ、任意のアプリケーションが任意のカーネルモード操作を得ることができます012:DR:システムコールがアプリケーションによってコピーできないカーネルモードを「入力」できるようにするものは何ですか?
ああ、それは、メモリマッピング、興味深いです。感謝して、何かに読んでください。 – lynks
ユーザーモード(回答が更新されたとき)で禁止される特権命令はもちろん。 – jlliagre
まあ、私はまだスイッチがどのように起こっているのかはっきりしていませんし、手動で 'スイッチ命令'を実行できない理由は:<*switch*> 'シェルコード、なぜカーネルモードの実行を得られないのですか? –
lynks