GNU/Linux >> Tutoriales Linux >  >> Linux

Entendiendo Linux /proc/id/maps

Cada fila en /proc/$PID/maps describe una región de memoria virtual contigua en un proceso o subproceso. Cada fila tiene los siguientes campos:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • dirección - Esta es la dirección inicial y final de la región en el espacio de direcciones del proceso
  • permisos - Describe cómo se puede acceder a las páginas de la región. Hay cuatro permisos diferentes:leer, escribir, ejecutar y compartir. Si la lectura/escritura/ejecución están deshabilitadas, un - aparecerá en lugar del r /w /x . Si una región no es compartida , es privado , entonces un p aparecerá en lugar de un s . Si el proceso intenta acceder a la memoria de una forma no permitida, se genera una falla de segmentación. Los permisos se pueden cambiar usando el mprotect llamada al sistema.
  • compensación - Si la región fue mapeada desde un archivo (usando mmap ), este es el desplazamiento en el archivo donde comienza la asignación. Si la memoria no se asignó desde un archivo, es solo 0.
  • dispositivo - Si la región se asignó desde un archivo, este es el número de dispositivo principal y secundario (en hexadecimal) donde reside el archivo.
  • inodo - Si la región se asignó desde un archivo, este es el número de archivo.
  • nombre de ruta - Si la región fue mapeada desde un archivo, este es el nombre del archivo. Este campo está en blanco para regiones mapeadas anónimas. También hay regiones especiales con nombres como [heap] , [stack] o [vdso] . [vdso] significa objeto virtual dinámico compartido. Lo utilizan las llamadas del sistema para cambiar al modo kernel. Aquí hay un buen artículo al respecto:"¿Qué es linux-gate.so.1?"

Es posible que observe muchas regiones anónimas. Estos generalmente son creados por mmap pero no se adjuntan a ningún archivo. Se utilizan para muchas cosas misceláneas como la memoria compartida o los búferes no asignados en el montón. Por ejemplo, creo que la biblioteca pthread usa regiones mapeadas anónimas como pilas para nuevos hilos.


el mapeo de memoria no solo se usa para mapear archivos en la memoria, sino que también es una herramienta para solicitar RAM del kernel. Estas son esas entradas del inodo 0:su pila, montón, segmentos bss y más


Consulte: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

El campo de dirección es el espacio de direcciones en el proceso que ocupa la asignación.

El campo perms es un conjunto de permisos:

 r = read
 w = write
 x = execute
 s = shared
 p = private (copy on write)

El campo de desplazamiento es el desplazamiento en el archivo/lo que sea;

dev es el dispositivo (mayor:menor);

inode es el inodo en ese dispositivo. 0 indica que ningún inodo está asociado con la región de memoria, como sería el caso con BSS (datos no inicializados).

El campo de nombre de ruta normalmente será el archivo que respalda la asignación. Para los archivos ELF, puede coordinarlos fácilmente con el campo de compensación mirando el campo de compensación en los encabezados del programa ELF (readelf -l).

En Linux 2.0, no hay ningún campo que indique el nombre de la ruta.


Linux
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. Linux – ¿Vincular /proc/mnt a /proc/mounts?

  3. Linux – ¿Fusionar /usr/bin y /usr/sbin en /bin (gnu/linux)?

  4. Comprender el archivo /etc/inittab en Linux

  5. Comprender el archivo de configuración /etc/profile en Linux

Comprender los permisos de archivos de Linux

/dev/null en Linux

Archivos /proc/cpuinfo y /proc/meminfo en Linux

Entendiendo el archivo /etc/group

Comprender el archivo /etc/fstab en Linux

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions