2016-11-01 11 views
0

この汚いCoWの概念証明:https://github.com/dirtycow/dirtycow...ter/dirtyc0w.cを理解しようとしています。MAP_PRIVATE mmapedファイルへの書き込み

子スレッド(上記のリンクのprocselfmemThread)が親によってMAP_PRIVATEおよびPROT_READとしてマップされたメモリに書き込むとどうなりますか?具体的には、カーネルは既存のマッピングを匿名で書き込み可能に変更しますか?コピーオンライトはいつ行われますか?他の子スレッド(上記のリンクのmadviseThread)が実行されていないとしましょう。

答えて

0

二つの部分 1.メモリマップ内の答えはあなたがすでにPROT_READとMAP_PRIVATEでファイルをマッピングされただけなので ファイル読み、正確にあなたの質問に答えるために、これはあなたのファイルのVMA(仮想メモリ領域)を作成します。 VMAは、テキスト、データ、mmapなどのプロセス領域を管理するためのメタデータ構造に過ぎません。 VMAは開始アドレスと終了アドレスを持っています。これらの開始アドレスと終了アドレスは、基本的にファイルにバックアップされたメモリマップ領域とPROT_READ以降の赤色領域のみのプロセス仮想アドレスです。

  • uで言及したプログラムであるため、
    の/ proc /自己/ MEMは、仮想アドレス空間を処理するためにアクセスすることを可能にする特殊なファイルである/ procの/自己に/ MEMを書く
      は、ファイル記述子をメモリマップ領域(MAP_PRIVATE)にシークします。基本的には、以前にマップされたファイルのメモリマップ領域に書き込んでいます。これは、書き込み時に読み取り専用のマッピングであったため、ページのコピーを作成し、書き込み時にコピーを行います。 Notr:ここに/ proc/self/memファイルが書き込まれましたが、ファイルのメモリマップ領域ではありません。
  • 関連する問題