0

書き込み保護されたページへの書き込みをキャッチする方法はありますか?

オブジェクトをコピーしてインスタンス化する自己のようなオブジェクトシステムを計画しています。(他のオブジェクトに比べてシンプルでコンパクトに聞こえるため) 明らかに、この目的のために作成されたオブジェクトは何らかの方法で書き込み保護されている必要があります。ELF のプログラム ヘッダーから書き込み保護されているものにフラグを付ける方法があることを確認しました。(RE、RWE、RW フラグ)

これは書き込み保護を提供しますか? セグメンテーション違反が発生するはずだと覚えていますが、これは本当ですか? 書き込み保護されたページへの書き込みをキャッチする方法。これは私が望んでいるものを実装する良い方法ですか?もっと良い方法はありますか?

4

1 に答える 1

1

はい、 mprotectを使用できます。

はい、保護されたメモリに書き込むとセグメンテーション違反が発生します。C++ などでハンドラをインストールできます。

std::signal(SIGSEGV, my_segv_handler_func);

これは、やりたいことを実行するためのもっともらしい方法ですが、それを機能させるには、多くの余分な管理グーを追加する必要があります。たとえば、この種の書き込み検出はハードウェアで行われ、x86 アーキテクチャではページ サイズが 4k になります。したがって、一般的な「アドレス X から開始して N バイトに進む」という一般的な方法ではなく、4k の境界に合わせて、一度に 4k を保護できます。私はあなたがしなければならないと信じています

  1. ページへの書き込みが特定の保護オブジェクトへの書き込みであるかどうかを識別できるように、ページへのオブジェクトのマッピングを持っている、または
  2. 常に 4k 境界で割り当てる独自の malloc をロールします。これにより、4k の最小割り当てブロック サイズを使用する必要があります。

もっと良い方法があるかどうかは頭の中でわかりませんが、遊ぶのは楽しそうです。:)

于 2009-01-05T08:49:17.563 に答える