0

カーネル関数インターセプトを実装しようとしています(この古いメソッド(c)Silvioを使用して、System.mapの関数へのポインターを置き換えます)。このフォーラムの投稿によると、いくつかの考えられる欠陥は、インターセプト後にフラッシュ/更新されない命令キャッシュとmp-IRQソースに関連している可能性があります。

これらのサブシステムとは何ですか?この場合、それらをどのように処理しますか?

4

1 に答える 1

2

命令キャッシュは Linux カーネル サブシステムではなく、CPU の一部です。

メイン メモリからのコードのフェッチには多くの時間がかかるため、CPU はキャッシュ メモリを使用してコード セクションをキャッシュします。これは、CPU がすぐに必要になると信じる理由がある命令 (コード) のコピーを保持する命令キャッシュです。

参照されている例のようにメモリ内の命令 (コード) を変更するが、命令キャッシュをフラッシュしない場合、変更されたコードは、置き換えた命令を保持する命令キャッシュ エントリがランダムな時点になるまで不思議なことに実行に失敗する可能性があります。クリアされます。

mp-IRQ は、Multiple Processor Interrupts の略です。このコンテキストに関連する問題は、SMP (マルチ CPU またはマルチコア) システムでは、トレース ポイントを植えるコードが 1 つの CPU で実行され、別の CPU がそれを実行している可能性があることです。これを安全に処理するには、CPU を同期するという非常に複雑なタスクを実行して、パッチを適用しようとしているコードが割り込みによって他の CPU で使用されていないことを確認する必要があります。

于 2011-03-07T19:07:52.743 に答える