Linux でカーネル モジュールを作成するというクレイジーで危険なアイデアを追求するとしたら、それは...
- カーネルの内部プロセス テーブルで PID によって指定されたプロセスを検索します
- テーブルからメモリ内のプロセスの開始/終了アドレスを抽出します
- このプロセスのすべてのメモリを 0 で上書きします
それから ...
- これは、プロセスを即座に終了させる方法でしょうか?
- これはどれほど「危険」でしょうか?即座にカーネルパニックを引き起こすことなく、それはまったく可能でしょうか?
プロセスのコードを(x86で)ゼロで上書きしても、プロセスの実行が停止する可能性はほとんどありませんが、それは単純な命令になるため、ADD EAX、[EAX]、それは最後までずっと歩くだけだと思いますコードセグメント[EAXが無効なメモリを指していない限り]。明らかに、プロセスのレジスタが無効なメモリ アドレスに設定されている場合 [64 ビットでは非正規の値が適切であり、32 ビットではゼロなどの書き込み保護されているもの]、および/またはメモリが「無効なオペコード」を引き起こす何かで満たされている場合、それは別の問題になります。
SIGKILL
これが(別名)を使用するよりも「優れている」方法が本当にわかりませんKILL -9 pid
-プロセスがカーネル内でブロックされ、何らかの形でカーネルを離れない場合、プロセスがとにかくそのコードを実行していません。カーネルにバグがある場合、プロセスのユーザー空間メモリに対して何を行っても、実際には問題になりません。カーネルのバグを修正!