1

プログラムが他のプログラムのメモリにアクセスするのを防ぐためにOSが提供するシステムコールについて知っています。しかし、それは、OS が提供するシステム コール ライブラリを使用した場合にのみ役立ちます。CPUビットをカーネルモードに設定し、特権命令を実行するアセンブリコードを自分で作成するとどうなりますか(メモリ内のOSのプログラムセグメントを変更するとしましょう)。OSはそれを防ぐことができますか? PS 好奇心からの質問です。できるだけ詳しく OS を勉強したいので、良いブログや書籍の参考文献を提供していただけると助かります。

4

2 に答える 2

1

プロセッサは、(1) 昇格モード (ここでの例では KERNEL) である必要があることによって、このような悪意のあるいたずらを再び保護します。(2) カーネル モードへのアクセスを制限します。

ユーザー モードからカーネル モードに入るには、割り込み (ここでは適用されません) または例外が必要です。通常、どちらも同じように処理されますが、いくつかの奇妙なプロセッサ (Intel と言いましたか?) では、処理が少し異なります。

オペレーティング システムの例外および割り込みハンドラは、ユーザー モード プログラムが実行できることを制限する必要があります。

CPU ビットをカーネル モードに設定し、特権命令を実行するアセンブリ コードを自分で作成するとどうなるでしょうか。

カーネル モードに入るには、プロセッサ ステータス レジスタのカーネル モード ビットを設定するだけではできません。

OSはそれを防ぐことができますか?

CPUはそれを防ぎます。

できるだけ詳しく OS を勉強したいので、良いブログや書籍の参考文献を提供していただけると助かります。

VAX/VMS Systems Internals の本は古いですが、安価で、実際の OS がどのように実装されているかを示しています。

于 2016-12-11T01:25:58.493 に答える
0

このブログは、私の混乱が何であったかを明確に説明しています。 http://minnie.tuhs.org/CompArch/Lectures/week05.html ユーザー プログラムはカーネル モードに切り替えることができますが、割り込み命令 (x86 の場合は int) を介して切り替える必要があり、この割り込みでは、割り込みハンドラは OS によって記述されます。(おそらく、起動時にカーネルモードだったとき)。したがって、すべての特権命令は、OS コードによってのみ実行できます。

于 2016-12-11T06:08:28.837 に答える