Setiap baris di /proc/$PID/maps
menggambarkan wilayah memori virtual yang berdekatan dalam suatu proses atau utas. Setiap baris memiliki bidang berikut:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
- alamat - Ini adalah alamat awal dan akhir wilayah di ruang alamat proses
- izin - Ini menjelaskan bagaimana halaman di wilayah tersebut dapat diakses. Ada empat izin berbeda:baca, tulis, jalankan, dan bagikan. Jika baca/tulis/eksekusi dinonaktifkan,
-
akan muncul sebagai penggantir
/w
/x
. Jika suatu wilayah tidak dibagi , ini pribadi , jadip
akan muncul sebagai penggantis
. Jika proses mencoba mengakses memori dengan cara yang tidak diizinkan, kesalahan segmentasi dihasilkan. Izin dapat diubah menggunakanmprotect
panggilan sistem. - offset - Jika wilayah dipetakan dari file (menggunakan
mmap
), ini adalah offset dalam file tempat pemetaan dimulai. Jika memori tidak dipetakan dari file, itu hanya 0. - perangkat - Jika wilayah dipetakan dari file, ini adalah nomor perangkat mayor dan minor (dalam hex) tempat file berada.
- inode - Jika wilayah dipetakan dari sebuah file, ini adalah nomor filenya.
- nama jalur - Jika wilayah dipetakan dari sebuah file, ini adalah nama filenya. Kolom ini kosong untuk wilayah yang dipetakan secara anonim. Ada juga daerah khusus dengan nama seperti
[heap]
,[stack]
, atau[vdso]
.[vdso]
singkatan dari objek bersama dinamis virtual. Ini digunakan oleh panggilan sistem untuk beralih ke mode kernel. Inilah artikel bagus tentangnya:"Apa itu linux-gate.so.1?"
Anda mungkin melihat banyak wilayah anonim. Ini biasanya dibuat oleh mmap
tetapi tidak dilampirkan ke file apa pun. Mereka digunakan untuk banyak hal lain seperti memori bersama atau buffer yang tidak dialokasikan di heap. Misalnya, menurut saya perpustakaan pthread menggunakan wilayah yang dipetakan secara anonim sebagai tumpukan untuk utas baru.
pemetaan memori tidak hanya digunakan untuk memetakan file ke dalam memori tetapi juga merupakan alat untuk meminta RAM dari kernel. Ini adalah entri inode 0 - stack, heap, segmen bss Anda, dan lainnya
Silakan periksa:http://man7.org/linux/man-pages/man5/proc.5.html
address perms offset dev inode pathname
00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
Bidang alamat adalah ruang alamat dalam proses yang ditempati oleh pemetaan.
Kolom perms adalah sekumpulan izin:
r = read
w = write
x = execute
s = shared
p = private (copy on write)
Bidang offset adalah offset ke dalam file/terserah;
dev adalah perangkatnya (mayor:minor);
inode adalah inode pada perangkat itu.0 menunjukkan bahwa tidak ada inode yang dikaitkan dengan wilayah memori, seperti halnya dengan BSS (data yang tidak diinisialisasi).
Bidang pathname biasanya berupa file yang mendukung pemetaan. Untuk file ELF, Anda dapat dengan mudah berkoordinasi dengan bidang offset dengan melihat bidang Offset di header program ELF (readelf -l).
Di bawah Linux 2.0, tidak ada kolom yang memberikan pathname.