GNU/Linux >> Linux Esercitazione >  >> Linux

Comprensione di Linux /proc/id/maps

Ogni riga in /proc/$PID/maps descrive una regione di memoria virtuale contigua in un processo o thread. Ogni riga ha i seguenti campi:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • indirizzo - Questo è l'indirizzo iniziale e finale della regione nello spazio degli indirizzi del processo
  • autorizzazioni - Descrive come è possibile accedere alle pagine nella regione. Esistono quattro diverse autorizzazioni:lettura, scrittura, esecuzione e condivisione. Se read/write/execute sono disabilitati, un - apparirà al posto del r /w /x . Se una regione non è condivisa , è privato , quindi un p apparirà invece di un s . Se il processo tenta di accedere alla memoria in un modo non consentito, viene generato un errore di segmentazione. I permessi possono essere modificati utilizzando il mprotect chiamata di sistema.
  • offset - Se la regione è stata mappata da un file (utilizzando mmap ), questo è l'offset nel file in cui inizia la mappatura. Se la memoria non è stata mappata da un file, è solo 0.
  • dispositivo - Se la regione è stata mappata da un file, questo è il numero principale e secondario del dispositivo (in esadecimale) in cui si trova il file.
  • inode - Se la regione è stata mappata da un file, questo è il numero del file.
  • nome percorso - Se la regione è stata mappata da un file, questo è il nome del file. Questo campo è vuoto per le regioni mappate anonime. Ci sono anche regioni speciali con nomi come [heap] , [stack] o [vdso] . [vdso] sta per oggetto condiviso dinamico virtuale. Viene utilizzato dalle chiamate di sistema per passare alla modalità kernel. Ecco un buon articolo a riguardo:"Cos'è linux-gate.so.1?"

Potresti notare molte regioni anonime. Questi sono generalmente creati da mmap ma non sono allegati a nessun file. Sono usati per molte cose varie come memoria condivisa o buffer non allocati nell'heap. Ad esempio, penso che la libreria pthread utilizzi regioni mappate anonime come stack per nuovi thread.


la mappatura della memoria non viene utilizzata solo per mappare i file in memoria, ma è anche uno strumento per richiedere la RAM dal kernel. Queste sono le voci dell'inode 0:stack, heap, segmenti bss e altro


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

Il campo dell'indirizzo è lo spazio degli indirizzi nel processo occupato dalla mappatura.

Il campo perms è un insieme di permessi:

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

Il campo offset è l'offset nel file/qualsiasi cosa;

dev è il dispositivo (maggiore:minore);

inode è l'inode su quel dispositivo.0 indica che nessun inode è associato alla regione di memoria, come nel caso di BSS (dati non inizializzati).

Il campo del percorso sarà solitamente il file che supporta la mappatura. Per i file ELF, puoi coordinarti facilmente con il campo offset osservando il campo Offset nelle intestazioni del programma ELF (leggi alf -l).

Sotto Linux 2.0, non c'è nessun campo che dia il nome del percorso.


Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Linux – Collegamento di /proc/mnt a /proc/mounts?

  3. Linux – Scopo della directory /net?

  4. Comprensione del file /etc/xinetd.conf in Linux

  5. Comprensione del file system /proc

Comprendere i permessi dei file Linux

/dev/null in Linux

/proc/cpuinfo e /proc/meminfo in Linux

Comprensione del file /etc/group

Comprendere il file /etc/fstab in Linux

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions