Každý řádek v /proc/$PID/maps
popisuje oblast souvislé virtuální paměti v procesu nebo vláknu. Každý řádek má následující pole:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
- adresa - Toto je počáteční a koncová adresa regionu v adresním prostoru procesu
- oprávnění - Popisuje, jak lze přistupovat ke stránkám v regionu. Existují čtyři různá oprávnění:čtení, zápis, spouštění a sdílení. Pokud je čtení/zápis/spouštění zakázáno, zobrazí se
-
se objeví místor
/w
/x
. Pokud oblast není sdílená , je soukromý , takžep
se zobrazí místos
. Pokud se proces pokusí o přístup k paměti způsobem, který není povolen, dojde k chybě segmentace. Oprávnění lze změnit pomocímprotect
systémové volání. - posun - Pokud byl region mapován ze souboru (pomocí
mmap
), toto je posun v souboru, kde začíná mapování. Pokud paměť nebyla namapována ze souboru, je to jen 0. - zařízení – Pokud byla oblast namapována ze souboru, jedná se o hlavní a vedlejší číslo zařízení (v hex), kde soubor žije.
- inode - Pokud byl region mapován ze souboru, jedná se o číslo souboru.
- název cesty - Pokud byl region mapován ze souboru, jedná se o název souboru. U anonymních mapovaných oblastí je toto pole prázdné. Existují také speciální oblasti s názvy jako
[heap]
,[stack]
nebo[vdso]
.[vdso]
znamená virtuální dynamický sdílený objekt. Používají ho systémová volání k přepnutí do režimu jádra. Tady je o tom dobrý článek:"Co je to linux-gate.so.1?"
Můžete si všimnout mnoha anonymních oblastí. Ty jsou obvykle vytvořeny mmap
ale nejsou připojeny k žádnému souboru. Používají se pro mnoho různých věcí, jako je sdílená paměť nebo vyrovnávací paměti, které nejsou přiděleny na hromadě. Například si myslím, že knihovna pthread používá anonymní mapované oblasti jako zásobníky pro nová vlákna.
mapování paměti se nepoužívá pouze k mapování souborů do paměti, ale je také nástrojem pro vyžádání RAM od jádra. Toto jsou položky inode 0 – váš stack, halda, segmenty bss a další
Zkontrolujte prosím: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
Pole adresy je adresový prostor v procesu, který mapování zabírá.
Pole Perms je sada oprávnění:
r = read
w = write
x = execute
s = shared
p = private (copy on write)
Pole offset je offset do souboru/cokoli;
dev je zařízení (hlavní:vedlejší);
inode je inode na tomto zařízení.0 znamená, že žádný inode není spojen s oblastí paměti, jak by tomu bylo v případě BSS (neinicializovaná data).
Pole názvu cesty bude obvykle soubor, který mapování zálohuje. U souborů ELF se můžete snadno koordinovat s polem offset pohledem na pole Offset v záhlaví programu ELF (readelf -l).
Pod Linuxem 2.0 neexistuje žádné pole uvádějící cestu.