2013-05-13 7 views
7

/proc/$pid/mapsは、x86_64 Linuxでrwx権限のないページを表示します。 私は、64ビットLinuxで/proc/$pid/mapsを読むと、私にはパーミッションのないメモリページがあることに気付きましたが、32ビットLinuxではそこにはありません。

私のプロセスのメモリ使用量を監視しようとしていますが、私は混乱しています。 rwx権限のないページがあるのはなぜですか?彼らは私の記憶を消費している!

これはアドバイスしてください「上」

% cat /proc/21367/maps 

3154200000-315420d000 r-xp 00000000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 
315420d000-315440d000 **---p** 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 
315440d000-315440e000 rw-p 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so 

のための64ビットのLinuxの出力の抜粋です。

答えて

10

これらのマッピングは、共有ライブラリのために使用される:最初のものは、実行権限を持つコードセグメント、第二の一つである

3b7cc00000-3b7cd86000 r-xp 00000000 fd:00 661350   /lib64/libc-2.12.so 
3b7cd86000-3b7cf86000 ---p 00186000 fd:00 661350   /lib64/libc-2.12.so 
3b7cf86000-3b7cf8a000 r--p 00186000 fd:00 661350   /lib64/libc-2.12.so 
3b7cf8a000-3b7cf8b000 rw-p 0018a000 fd:00 661350   /lib64/libc-2.12.so 

:各共有ライブラリのための一般的

は、我々は、4つのマッピングを有することになるロードPROT_NONE(権限なし)マッピング、最後の2つはデータセグメント(読み取り専用部分と読み取り書き込み)です。

PROT_NONEマッピングは、ライブラリを効率的に共有可能にし、ガードページをマークしてバッファオーバーフローを捕まえることができるように作成されています。

これらのマッピングは仮想アドレス空間の一部のみを使用していますが、実際にはシステムメモリを消費していないことに留意してください。

ここでは、完全な説明を見つけることができます。

http://www.greenend.org.uk/rjk/tech/dataseg.html

関連する問題