proc_pid_maps - نواحی
نگاشتشده
حافظه و
دسترسیهای
آن در
فرآیند
- /proc/pid/maps
- فایلی حاوی
نواحی
نگاشتشده
فعلی حافظه
و
دسترسیهای
آنها. برای
اطلاعات
بیشتر
درباره
نگاشتهای
حافظه، به
mmap(2) مراجعه
کنید.
- مجوز
دسترسی به
این فایل
تحت کنترل
بررسی حالت
دسترسی ptrace به
نام PTRACE_MODE_READ_FSCREDS
است؛ به ptrace(2)
مراجعه
کنید.
- قالب این
فایل به
صورت زیر
است:
-
address perms offset dev inode pathname
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]
- فیلد address
فضای آدرسی
در فرآیند
است که
نگاشت
اشغال
میکند.
فیلد perms
مجموعهای
از
دسترسیها
است:
-
r = read
w = write
x = execute
s = shared
p = private (copy on write)
- فیلد offset
میزان آفست
در داخل
فایل یا
منبع
مربوطه
است؛ dev
دستگاه
(اصلی:فرعی)
است؛ inode
شماره inode روی
آن دستگاه
است. مقدار 0
نشان
میدهد که
هیچ اینودی
با این
ناحیه
حافظه
مرتبط
نیست،
همانطور
که در مورد BSS
(دادههای
مقداردهینشده)
رخ میدهد.
- فیلد pathname
معمولاً
فایلی است
که پشتیبان
این نگاشت
است. برای
فایلهای
ELF،
میتوانید
با بررسی
فیلد Offset در
هدرهای
برنامه ELF
(readelf -l)
بهراحتی
با فیلد offset
هماهنگی
برقرار
کنید.
- مسیرهای
کاذب کمکی
دیگری نیز
وجود
دارند:
- [stack]
- پشته
فرآیند
اولیه
(معروف به
نخ اصلی).
- [stack:tid] (از
لینوکس 3.4 تا
لینوکس 4.4)
- پشته یک نخ
(که در آن tid
شناسه نخ
است). این
مورد با
مسیر /proc/pid/task/tid/
مطابقت
دارد. این
فیلد در
لینوکس 4.5
حذف شد،
زیرا ارائه
این
اطلاعات
برای
فرآیندی با
تعداد
زیادی نخ
هزینه
پردازشی
بالایی
دارد.
- [vdso]
- شیء
اشتراکی
پیوند
خورده پویا
به صورت
مجازی (virtual dynamically linked
shared object). به vdso(7)
مراجعه
کنید.
- [heap]
- هیپ
فرآیند.
- [anon:name] (از
لینوکس 5.17)
- یک نگاشت
ناشناس
خصوصی
نامگذاریشده.
با prctl(2) و PR_SET_VMA_ANON_NAME
تنظیم
میشود.
- [anon_shmem:name] (از
لینوکس 6.2)
- یک نگاشت
ناشناس
اشتراکی
نامگذاریشده.
با prctl(2) و PR_SET_VMA_ANON_NAME
تنظیم
میشود.
- اگر فیلد pathname
خالی باشد،
این یک
نگاشت
ناشناس است
که از طریق
mmap(2) به دست
آمده است.
هیچ راه
آسانی برای
ارجاع مجدد
آن به کد
منبع
فرآیند
وجود
ندارد، مگر
اجرای آن با
gdb(1) ، strace(1) یا
ابزارهای
مشابه.
- مقدار pathname
بدون
کاراکترهای
اسکیپ
نمایش داده
میشود، به
جز کاراکتر
خط جدید که
با توالی
اسکیپ در
مبنای هشت
جایگزین
میشود. در
نتیجه،
امکان
تشخیص این
موضوع وجود
ندارد که
آیا مسیر
اصلی حاوی
نویسه خط
جدید بوده
است یا
توالی
تحتاللفظی
\012 در آن
وجود داشته
است.
- اگر نگاشت
دارای
پشتیبان
فایلی باشد
و آن فایل
حذف شده
باشد، رشته
" (deleted)" به
انتهای نام
مسیر
افزوده
میشود.
توجه داشته
باشید که
این وضعیت
نیز دارای
ابهام است.
- در لینوکس
2.0، هیچ
فیلدی برای
ارائه مسیر
(pathname) وجود
ندارد.