pmap -x
コマンドを使って、Linux x86-64上のプロセスのメモリマップを見ようとしていました。私はpmapの出力を見て混乱しました。特に、ダイナミックライブラリをマッピングするエントリの場合。それらには複数のエントリがあります(実際にはすべて4つ、一部には3つのエントリがあります)。以下は、それがページ権限を持っていない一方で、ライブラリのそれぞれについて、第二列は、常に2メガバイトのサイズを有している例pmap出力を理解する
Address Kbytes RSS Dirty Mode Mapping
00000036ca200000 88 64 0 r-x-- libpthread-2.5.so
00000036ca216000 2044 0 0 ----- libpthread-2.5.so
00000036ca415000 4 4 4 r---- libpthread-2.5.so
00000036ca416000 4 4 4 rw--- libpthread-2.5.so
です。すべての図書館で、RSSはいつもゼロであるようです。最後の2行も同じサイズ(基本ページサイズ)と同じ権限を持ちます(少数のライブラリにはrwマッピングがありません)。
これについて誰かが説明していますか?私は、読み込み専用保護によるマッピングが、ライブラリのメタデータを読み込むためにローダによって行われる可能性があり、実行可能パーミッションを持つ部分が実際にはライブラリのコードである可能性があるという感覚がある。私は間違っているかもしれません。
しかし、私はその中間行についての手がかりはありません。許可も用途もありません。誰でも知恵の言葉をここに持っていますか?
また、匿名メモリ上にあると報告されたページがいくつかあり、モードビットは設定されていません。これらは何を表していますか?
[/ proc/$ pid/maps]は、x86 \ _64 linuxのrwx権限を持たないページを表示します(http://stackoverflow.com/questions/16524895/proc-pid-maps-shows-pages-with) -no-rwx-permissions-on-x86-64-linux) –
は、タイプミスを修正しようとしました:*実行可能なパーミッションを持つ*実際にはライブラリのコード* ...は "is"のように見えますが、 100%確実。手伝ってくれる? –