Chaque ligne en /proc/$PID/maps
décrit une région contiguë de la mémoire virtuelle d'un processus ou 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 - C'est le point de départ et l'adresse de fin de la région dans l'espace d'adressage du processus
-
autorisations - Ce qui décrit comment les pages dans la région peut être consulté. Il existe quatre types d'autorisations: lire, écrire, exécuter, et de partage. Si l'accès en lecture/écriture/exécution sont désactivés, un " - " apparaît au lieu du 'r'/'w'/'x'. Si une région n'est pas partagée, elle est privée, donc un " p "apparaît au lieu d'un "s". Si le processus tente d'accéder à la mémoire d'une manière qui n'est pas permis, faute de segmentation est généré. Les autorisations peuvent être modifiées à l'aide de l'
mprotect
appel système.
-
offset - Si la région a été cartographié à partir d'un fichier (à l'aide d'
mmap
), c'est l'offset dans le fichier dans lequel le mappage commence. Si la mémoire n'a pas été cartographié à partir d'un fichier, c'est juste 0.
-
appareil - Si la région a été cartographié à partir d'un fichier, c'est la majeure et la mineure numéro de périphérique (en hexadécimal) où le fichier de vie.
-
inode - Si la région a été cartographié à partir d'un fichier, c'est le numéro de fichier.
-
chemin - Si la région a été cartographié à partir d'un fichier, c'est le nom du fichier. Ce champ est vide pour les anonymes cartographiée des régions. Il existe également des régions avec des noms comme
[heap]
, [stack]
ou [vdso]
. [vdso]
signifie virtual dynamic shared object. Il est utilisé par des appels système pour passer en mode noyau. Voici un bon article sur le sujet.
Vous remarquerez peut-être beaucoup d'anonymes des régions. Ce sont généralement créées par des mmap
mais ne sont attachées à aucun fichier. Ils sont utilisés pour un grand nombre de diverses choses comme la mémoire partagée ou de tampons non alloué sur le tas. Par exemple, je pense que la bibliothèque pthread utilise anonyme cartographiée des régions que des piles pour de nouvelles discussions.