proc_pid_maps(5) File Formats Manual proc_pid_maps(5)

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) وجود ندارد.

proc(5)

2024-06-15 Linux man-pages 6.9.1