0

Linux でカーネル モジュールを作成するというクレイジーで危険なアイデアを追求するとしたら、それは...

  • カーネルの内部プロセス テーブルで PID によって指定されたプロセスを検索します
  • テーブルからメモリ内のプロセスの開始/終了アドレスを抽出します
  • このプロセスのすべてのメモリを 0 で上書きします

それから ...

  • これは、プロセスを即座に終了させる方法でしょうか?
  • これはどれほど「危険」でしょうか?即座にカーネルパニックを引き起こすことなく、それはまったく可能でしょうか?
4

1 に答える 1

1

プロセスのコードを(x86で)ゼロで上書きしても、プロセスの実行が停止する可能性はほとんどありませんが、それは単純な命令になるため、ADD EAX、[EAX]、それは最後までずっと歩くだけだと思いますコードセグメント[EAXが無効なメモリを指していない限り]。明らかに、プロセスのレジスタが無効なメモリ アドレスに設定されている場合 [64 ビットでは非正規の値が適切であり、32 ビットではゼロなどの書き込み保護されているもの]、および/またはメモリが「無効なオペコード」を引き起こす何かで満たされている場合、それは別の問題になります。

SIGKILLこれが(別名)を使用するよりも「優れている」方法が本当にわかりませんKILL -9 pid-プロセスがカーネル内でブロックされ、何らかの形でカーネルを離れない場合、プロセスがとにかくそのコードを実行していません。カーネルにバグがある場合、プロセスのユーザー空間メモリに対して何を行っても、実際には問題になりません。カーネルのバグを修正!

于 2013-03-10T14:41:02.947 に答える