/proc/pid/maps - przypisane obszary pamięci
- /proc/pid/maps
- Plik zawierający aktualnie zmapowane obszary pamięci wraz z
prawami dostępu do nich. Więcej informacji o mapowaniu
pamięci zawiera podręcznik systemowy mmap(2).
- Uprawnienie dostępu do tego pliku zależy od sprawdzenia
trybu dostępu ptrace: PTRACE_MODE_READ_FSCREDS; zob.
ptrace(2).
- Format pliku jest następujący:
-
adres uprawn przesun urządz i-węzeł ścieżka
00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
00651000-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon
00652000-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon
00e03000-00e24000 rw-p 00000000 00:00 0 [heap]
00e24000-011f7000 rw-p 00000000 00:00 0 [heap]
...
35b1800000-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a20000-35b1a21000 rw-p 00020000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a21000-35b1a22000 rw-p 00000000 00:00 0
35b1c00000-35b1dac000 r-xp 00000000 08:02 135870 /usr/lib64/libc-2.15.so
35b1dac000-35b1fac000 ---p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870 /usr/lib64/libc-2.15.so
...
f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0 [stack:986]
...
7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0 [stack]
7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0 [vdso]
- Pole adres jest przestrzenią adresową procesu,
który ją zajmuje, a uprawn jest zbiorem
uprawnień:
-
r = odczyt
w = zapis
x = wykonywanie
s = wspólne
p = prywatne (kopiowane przy zapisie)
- Przesun jest przesunięciem w pliku lub w czymś innym,
urządz zawiera numery (główny:poboczny)
urządzenia, a i-węzeł jest
i-węzłem na tym urządzeniu. 0 wskazuje, że nie
istnieje i-węzeł związany z tym obszarem
pamięci, jak to na przykład ma miejsce w przypadku segmentu
BSS (niezainicjowanych danych).
- Ścieżka to zwykle plik zabezpieczający
mapowanie. Koordynacja jest łatwa w przypadku plików ELF za
pomocą pola przesun, poprzez sprawdzenie pola Offset w
nagłówkach programu ELF (readelf -l).
- Istnieją dodatkowe, pomocne pseudościeżki:
- [stack]
- Stos pierwotnego procesu (zwanego też głównym
wątkiem)
- [stack:tid] (od Linuksa 3.4 do Linuksa 4.4)
- Stos wątku (gdzie <tid> jest identyfikatorem
wątku). Odpowiada ścieżce
/proc/[pid]/task/[tid]/. Pole to usunięto w Linuksie 4.5,
ponieważ udostępnianie tej informacji w przypadku procesu z
dużą liczbą wątków jest kosztowne.
- [vdso]
- Wirtualny, dynamicznie linkowany obiekt współdzielony. Patrz
vdso(7).
- [heap]
- Sterta wątku.
- [anon:nazwa] (od Linuksa 5.17)
- Nazwane, prywatne mapowanie anonimowe. Ustawiane za pomocą
PR_SET_VMA_ANON_NAME prctl(2).
- [anon_shmem:nazwa] (od Linuksa 6.2)
- Nazwane, dzielone mapowanie anonimowe. Ustawiane za pomocą
PR_SET_VMA_ANON_NAME prctl(2).
- Jeśli pole ścieżka jest puste, to jest to
anonimowe przypisanie, takie jak pozyskiwane za pomocą
mmap(2). Nie ma prostej metody na powiązanie jej ze
źródłem procesu oprócz metod takich jak
gdb(1), strace(1) itp.
- pathname jest ukazywane bez cytowania, z wyjątkiem
znaków nowego wiersza, zastępowanych ósemkową
sekwencją ucieczki. Z tego powodu, nie da się
określić, czy oryginalna ścieżka
zawierała znak nowego wiersza, czy sekwencję znaków
\012.
- Jeśli mapowanie dotyczy pliku i plik ten został
usunięty, w ścieżce pojawi się
łańcuch „ (deleted)”. Proszę
zauważyć, że to również jest
niejednoznaczne.
- W Linuksie 2.0 nie ma pola podającego nazwę
ścieżki.
Tłumaczenie niniejszej strony podręcznika: Przemek
Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org>
i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną
dokumentacją. Bliższe informacje o warunkach licencji
można uzyskać zapoznając się z
GNU General
Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika
prosimy zgłaszać na adres listy dyskusyjnej
manpages-pl-list@lists.sourceforge.net.