ファイル/proc/self/smapsのスニペットを次に示します。
00af8000-00b14000 r-xp 00000000 fd:00 16417 /lib/ld-2.8.so
Size: 112 kB
Rss: 88 kB
Pss: 1 kB
Shared_Clean: 88 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 88 kB
Swap: 0 kB
00b14000-00b15000 r--p 0001c000 fd:00 16417 /lib/ld-2.8.so
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Swap: 0 kB
このプロセス(自己)が/lib/ld-2.8.soにリンクされており、(多数のうちの) 2 つのバイト範囲がメモリにマップされていることがわかります。
88kb の最初の範囲 (22 個の 4kb ページ) は共有されており、クリーンです。つまり、書き込まれていません。これはおそらくコードです。
4kb の 2 番目の範囲 (単一ページ) は共有されておらず、ダーティです。ディスク上のファイルからメモリ マップされているため、プロセスが書き込みを行っています。これはおそらくデータです。
しかし、その記憶には何がありますか?
メモリ範囲00b14000 ~ 00b15000を、大きな静的構造体が宣言されているファイルの行番号などの有用な情報に変換するにはどうすればよいですか?
この手法では、execshieldなどによる事前リンクとアドレス空間のランダム化を考慮し、デバッグ シンボルを分離する必要があります。
(動機は、ダーティ メモリを作成する一般的なライブラリを特定し、構造体を const と宣言するなどして修正することです)。