Pemetaan perpustakaan bersama di / proc / pid / maps

8

Mengapa /proc/pid/mapsmengandung beberapa catatan untuk perpustakaan yang sama? Berikut ini sebuah contoh:

7fae7db9f000-7fae7dc8f000 r-xp 00000000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7dc8f000-7fae7de8f000 ---p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de8f000-7fae7de97000 r--p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de97000-7fae7de99000 rw-p 000f8000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20

Apa artinya ini ?

Irbis
sumber

Jawaban:

12

Keempat catatan memiliki izin yang berbeda, sehingga tidak dapat digabungkan.

  • The r-xpentri menggambarkan blok memori executable ( xizin bendera). Itu kodenya.
  • The r--pentri menggambarkan sebuah blok memori yang hanya dapat dibaca ( rizin bendera). Itu data statis (konstanta).
  • The rw-pentri menggambarkan sebuah blok memori yang dapat ditulis ( wizin bendera). Ini untuk variabel global perpustakaan.
  • The ---pentri menggambarkan sepotong ruang alamat yang tidak memiliki izin (atau memori dipetakan untuk itu).

Semua bersifat pribadi ( pflag), yang berarti bahwa jika suatu proses memodifikasi halaman (yang hanya mungkin untuk bagian yang dapat ditulisi), halaman itu akan disalin (copy-on-write), dan proses lainnya tidak akan melihat perubahan apa pun.

Entri terakhir itu adalah celah antara segmen kode dan segmen data yang secara eksplisit dimasukkan oleh penghubung GNU dalam keadaan tertentu. Tujuan dari celah ini adalah untuk memastikan bahwa kode (dapat dibagikan antara proses yang menggunakan perpustakaan yang sama) dan data yang dapat ditulis (tidak dapat dibagikan) tidak pernah berada di halaman yang sama. Ukuran celahnya adalah 2MB karena itu adalah ukuran halaman terbesar¹ yang digunakan Linux pada arsitektur Anda (amd64). Lihat Apa tujuan pemetaan memori yang tampaknya tidak dapat digunakan di linux? untuk lebih jelasnya.

¹ Sebagian besar halaman 4kB, yang merupakan ukuran halaman "normal". Tetapi mungkin ada halaman yang menggunakan lebih sedikit tipuan MMU, yang sedikit lebih cepat tetapi membuang banyak ruang kecuali aplikasi benar-benar menggunakan blok memori yang sangat besar. Linux menyebut halaman-halaman besar ini .

Sumber dan informasi lebih lanjut untuk celah yang belum dipetakan: Mengapa gnome-panel menggunakan 290MB? oleh RJK. Lihat juga entri /proc/PID/mapsdalam dokumentasi kernel Linux , Memahami Linux / proc / id / maps dan / proc / $ pid / maps menunjukkan halaman tanpa izin rwx di x86_64 linux pada Stack Overflow.

Gilles 'SANGAT berhenti menjadi jahat'
sumber