ユーザーはカーネルモードで自分のプログラムを実行できますか?ユーザーはどのようにこれを行うことができますか?システム保護メカニズムのどんな弱点を迂回すべきですか?
私の意見では、ユーザープログラムは割り込みベクトルのモードビットをユーザーモードからカーネルモードに切り替えることができ、それからあなたが望む割り込みハンドラを実行できると思います。私は正しい道を行っていますか?
答え1
ユーザーはカーネルモードで自分のコードを実行できません。カーネルモードを使用すると、プログラムはマシン(この場合は仮想マシン)のさまざまな側面を制御できます。カーネルモードでコードを実行すると、すべてのセキュリティ対策がバイパスされます。
モジュールをロードしてカーネルモードでコードを実行できます。もちろん、ルートのみモジュールをロードできます(一部の静的セキュリティ構成では、この機能を無効にできます)。
「ユーザープログラムが割り込みベクトルのモードビットをユーザーモードからカーネルモードに切り替えることができる」ということが何を意味するのかわかりません。ユーザープログラムは割り込みベクトルを制御できず、カーネルはそれを自分で予約します。
答え2
システムコールを接続して1つを追加すると、プログラムはカーネルモードで実行して「システムコール」を追加できます。カーネルバージョンを見つけるには、/boot/system.map-kernel バージョンに行を追加する必要があります。 /proc /version LKM ツールを使用すると、これを行うことができます。