ユーザーはどのようにしてプログラムをカーネルモードで実行できるのでしょうか?

ユーザーはどのようにしてプログラムをカーネルモードで実行できるのでしょうか?

ユーザーがカーネル モードで独自のプログラムを実行することは可能ですか? ユーザーはどうすればこれを実現できるでしょうか? システムの保護メカニズムのどのような弱点を回避する必要があるでしょうか?

ユーザー プログラムは、割り込みベクター内のモード ビットをユーザー モードからカーネル モードに切り替えることができ、必要な割り込み ハンドラーを実行できると考えています。私の考えは正しいでしょうか?

答え1

ユーザーはカーネル モードで独自のコードを実行することはできません。カーネル モードでは、プログラムがマシン (仮想マシンの場合) のあらゆる側面を制御できます。カーネル モードでコードを実行すると、すべてのセキュリティ対策が回避されます。

モジュールをロードすることで、カーネル モードでコードを実行できます。もちろん、モジュールをロードできるのは root だけです (特定の静的でセキュリティの高い構成では、これを無効にすることができます)。

「ユーザー プログラムは割り込みベクターのモード ビットをユーザー モードからカーネル モードに切り替えることができる」とはどういう意味かわかりません。ユーザー プログラムは割り込みベクターを制御できず、カーネルがそれを自ら予約します。

答え2

システムコールをフックして、あなたのプログラムとなるoncを追加することができます。あなたのプログラムはカーネルモードで実行され、「システムコール」を追加します。/boot/system.map-kernel versionファイルに行を追加して、カーネルバージョン/proc/versionを見つける必要があります。LKMツールはそれを行うのに役立ちます。

関連情報