4

ユーザー モード プロセスとカーネル モジュールがあります。ここで、カーネルからユーザーモード プロセスの特定の領域を読み取りたいのですが、ユーザーモード メモリのコピーがなく、VA による単純なアクセスという問題が 1 つあります。つまり、ターゲット プロセスの task_struct、その他の関連する構造体 (mm_struct、vma_struct など)、および 0x0070abcd などの仮想アドレスを読み取るか、何らかの方法でカーネル モジュールにマップします。

get_user_pages を使用して目的のメモリ領域のページ リストを取得できますが、次はどうすればよいでしょうか。ページを何らかの形でカーネルにマップしてから、それらを連続メモリ領域として読み取ろうとする必要がありますか、それともより良い解決策がありますか?

4

1 に答える 1

1

問題は、ユーザー空間を「見る」には、大量のものをロックする必要があることです。したがって、任意の時間すべてをロックしたままにしておくよりも、短いコピーを作成する方が適切です。ユーザー空間プロセスが現在の CPU に VM マップされていない可能性があります。実際、それ自体のカーネル呼び出しの途中などで、別の CPU で実行されている、ディスクに完全にスワップアウトされている可能性があります。

Linux カーネル: copy_from_user - ポインターを持つ構造体

于 2013-04-15T00:36:46.400 に答える