7

ターゲット プロセス p2 に属するデータ ページを上書きするために、プロセス p1 によって呼び出されるカーネル モジュールを作成しています。

まず、カーネル モジュール内で、p1 によって発行された proc ファイル システムへの書き込みイベントに応答します。ターゲット プロセス (p2) のプロセス ID を使用して、ターゲット プロセスのタスク構造体 (p2_task) を検索しました。

使用した特定のページを検索するにはget_user_pages()、明らかに ( p2_task->mm) で呼び出します。次にkmap()、前の関数によって返されたページを呼び出しました。ポインタを取得したら、典型的なメモリ関数 ( memset()) を使用してそのメモリに書き込みました。最後に呼び出されkunmap()ます。

ただし、プロセスが再び実行を開始すると、実行したことがターゲット プロセス p2 に影響を与えていないことがわかります。

何が間違っていたのかわかりません。誰でも助けることができますか?

p2からのリクエストに応答しているときに、プロセスp2に属するメモリに何らかの方法で書き込むことができないと思われます。ここから、私たちは異なる文脈にいます。

これは本当ですか、他に確認できることはありませんか。それが問題である場合、それを回避できる方法はありますか?

4

2 に答える 2

0

私にはTLBの問題のように聞こえます。これにより、p2にはハードウェアにキャッシュされたデータの仮想アドレスがあります。p1 が値を変更する前に、p2 はアドレス空間内のページを以前に読み書きしましたか?

値を変更した後、p1 でこれを呼び出してみてください。 flush_tlb_page(struct vm_area_struct * vma, unsigned long address)

于 2014-06-27T22:11:27.787 に答える