Chaque ligne dans /proc/$PID/maps
décrit une région de mémoire virtuelle contiguë dans un processus ou un thread. Chaque ligne contient les champs suivants :
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
- adresse - Il s'agit de l'adresse de début et de fin de la région dans l'espace d'adressage du processus
- autorisations - Ceci décrit comment les pages de la région peuvent être consultées. Il existe quatre autorisations différentes :lecture, écriture, exécution et partage. Si la lecture/écriture/exécution sont désactivées, un
-
apparaîtra à la place dur
/w
/x
. Si une région n'est pas partagée , c'est privé , donc unp
apparaîtra à la place d'uns
. Si le processus tente d'accéder à la mémoire d'une manière non autorisée, une erreur de segmentation est générée. Les autorisations peuvent être modifiées à l'aide dumprotect
appel système. - compensation - Si la région a été cartographiée à partir d'un fichier (en utilisant
mmap
), il s'agit du décalage dans le fichier où le mappage commence. Si la mémoire n'a pas été mappée à partir d'un fichier, c'est juste 0. - appareil - Si la région a été mappée à partir d'un fichier, il s'agit du numéro de périphérique majeur et mineur (en hexadécimal) où réside le fichier.
- inode - Si la région a été cartographiée à partir d'un fichier, il s'agit du numéro de fichier.
- chemin d'accès - Si la région a été cartographiée à partir d'un fichier, il s'agit du nom du fichier. Ce champ est vide pour les régions cartographiées anonymes. Il existe également des régions spéciales avec des noms tels que
[heap]
,[stack]
, ou[vdso]
.[vdso]
signifie objet partagé dynamique virtuel. Il est utilisé par les appels système pour passer en mode noyau. Voici un bon article à ce sujet :"Qu'est-ce que linux-gate.so.1 ?"
Vous remarquerez peut-être de nombreuses régions anonymes. Ceux-ci sont généralement créés par mmap
mais ne sont attachés à aucun fichier. Ils sont utilisés pour beaucoup de choses diverses comme la mémoire partagée ou les tampons non alloués sur le tas. Par exemple, je pense que la bibliothèque pthread utilise des régions mappées anonymes comme piles pour les nouveaux threads.
le mappage de mémoire n'est pas seulement utilisé pour mapper des fichiers dans la mémoire, mais est également un outil pour demander de la RAM au noyau. Ce sont ces entrées inode 0 - votre pile, votre tas, vos segments bss et plus
Veuillez vérifier :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
Le champ d'adresse est l'espace d'adressage dans le processus occupé par le mappage.
Le champ perms est un ensemble d'autorisations :
r = read
w = write
x = execute
s = shared
p = private (copy on write)
Le champ décalage est le décalage dans le fichier/quel que soit;
dev est le périphérique (majeur :mineur) ;
inode est l'inode sur ce périphérique.0 indique qu'aucun inode n'est associé à la région mémoire, comme ce serait le cas avec BSS (données non initialisées).
Le champ de nom de chemin sera généralement le fichier qui sauvegarde le mappage. Pour les fichiers ELF, vous pouvez facilement coordonner avec le champ de décalage en consultant le champ Décalage dans les en-têtes du programme ELF (readelf -l).
Sous Linux 2.0, il n'y a pas de champ indiquant le chemin.