cat /proc/maps 进程内存映射【转】
轉(zhuǎn)自:http://blog.csdn.net/fisher_jiang/article/details/5063852
proc/<PID>/maps
查看進(jìn)程的虛擬地址空間是如何使用的。
該文件有6列,分別為:
地址:庫(kù)在進(jìn)程里地址范圍
權(quán)限:虛擬內(nèi)存的權(quán)限,r=讀,w=寫(xiě),x=,s=共享,p=私有;
偏移量:庫(kù)在進(jìn)程里地址范圍
設(shè)備:映像文件的主設(shè)備號(hào)和次設(shè)備號(hào);
節(jié)點(diǎn):映像文件的節(jié)點(diǎn)號(hào);
路徑: 映像文件的路徑
每項(xiàng)都與一個(gè)vm_area_struct結(jié)構(gòu)成員對(duì)應(yīng),
范例:
應(yīng)用程序的正文段(權(quán)限為r-xp)從0x08048000到0x08049000,大小為4096;數(shù)據(jù)段從0x08049000到0x0804a000,大小為1KB。該應(yīng)用程序使用了兩個(gè)庫(kù):lib和libc。Libc 的正文段從0x00391000到0x004b4000,大小為1164KB;數(shù)據(jù)段從0x004b5000到0x004b8000,大小為12KB.
Ld 的正文段從00378000到0038d000,大小為84KB;數(shù)據(jù)段從0x0038e000到0x0038f000,大小為4KB。該應(yīng)用程序所使用的庫(kù)所占的虛擬空間的大小從0x4b8000到0x378000,大小為1280KB,其實(shí)真正大小為VmLib(1251KB);因?yàn)槭前错?yè)分配,每頁(yè)大小為4KB。
[root@localhost ~]# cat /proc/7114/maps
08047000-080dc000 r-xp 00000000 03:06 884901 /bin/bash
080dc000-080e3000 rwxp 00094000 03:06 884901 /bin/bash
080e3000-08129000 rwxp 080e3000 00:00 0 [heap]
4d575000-4d58a000 r-xp 00000000 03:06 736549 /lib/ld-2.3.4.so
4d58a000-4d58b000 r-xp 00015000 03:06 736549 /lib/ld-2.3.4.so
4d58b000-4d58c000 rwxp 00016000 03:06 736549 /lib/ld-2.3.4.so
4d58e000-4d6b1000 r-xp 00000000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b1000-4d6b2000 r-xp 00123000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b2000-4d6b5000 rwxp 00124000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b5000-4d6b7000 rwxp 4d6b5000 00:00 0
4d6de000-4d6e0000 r-xp 00000000 03:06 736552 /lib/libdl-2.3.4.so
4d6e0000-4d6e2000 rwxp 00001000 03:06 736552 /lib/libdl-2.3.4.so
4d807000-4d80a000 r-xp 00000000 03:06 736567 /lib/libtermcap.so.2.0.8
4d80a000-4d80b000 rwxp 00002000 03:06 736567 /lib/libtermcap.so.2.0.8
b7bf2000-b7c1e000 r-xp 00000000 03:06 881337 /usr/lib/gconv/GB18030.so
b7c1e000-b7c20000 rwxp 0002b000 03:06 881337 /usr/lib/gconv/GB18030.so
b7c20000-b7c26000 r-xs 00000000 03:06 881502 /usr/lib/gconv/gconv-modules.cache
b7c26000-b7d2f000 r-xp 02197000 03:06 852489 /usr/lib/locale/locale-archive
b7d2f000-b7f2f000 r-xp 00000000 03:06 852489 /usr/lib/locale/locale-archive
b7f2f000-b7f38000 r-xp 00000000 03:06 734450 /lib/libnss_files-2.3.4.so
b7f38000-b7f3a000 rwxp 00008000 03:06 734450 /lib/libnss_files-2.3.4.so
b7f3a000-b7f3c000 rwxp b7f3a000 00:00 0
b7f51000-b7f52000 rwxp b7f51000 00:00 0
bfc3d000-bfc52000 rw-p bfc3d000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
[root@localhost ~]#
參數(shù) 解釋
address: 0085d000-00872000 虛擬內(nèi)存區(qū)域的起始和終止地址文件所占的地址空間
perms:rw-p 權(quán)限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
offset: 00000000 虛擬內(nèi)存區(qū)域在被映射文件中的偏移量
dev: 03:08 文件的主設(shè)備號(hào)和次設(shè)備號(hào)
inode: 設(shè)備的節(jié)點(diǎn)號(hào),0表示沒(méi)有節(jié)點(diǎn)與內(nèi)存相對(duì)應(yīng)
name: /lib/ld-2.3.4.so 被映射文件的文件名
各共享庫(kù)的代碼段,存放著二進(jìn)制可執(zhí)行的機(jī)器指令,是由kernel把該庫(kù)ELF文件的代碼段map到虛存空間;
各共享庫(kù)的數(shù)據(jù)段,存放著程序執(zhí)行所需的全局變量,是由kernel把ELF文件的數(shù)據(jù)段map到虛存空間;
用戶(hù)代碼段,存放著二進(jìn)制形式的可執(zhí)行的機(jī)器指令,是由kernel把ELF文件的代碼段map到虛存空間;
用戶(hù)數(shù)據(jù)段之上是代碼段,存放著程序執(zhí)行所需的全局變量,是由kernel把ELF文件的數(shù)據(jù)段map到虛存空間;
用戶(hù)數(shù)據(jù)段之下是堆(heap),當(dāng)且僅當(dāng)malloc調(diào)用時(shí)存在,是由kernel把匿名內(nèi)存map到虛存空間,堆則在程序中沒(méi)有調(diào)用malloc的情況下不存在;
用戶(hù)數(shù)據(jù)段之下是棧(stack),作為進(jìn)程的臨時(shí)數(shù)據(jù)區(qū),是由kernel把匿名內(nèi)存map到虛存空間,棧空間的增長(zhǎng)方向是從高地址到低地址。
本文轉(zhuǎn)自張昺華-sky博客園博客,原文鏈接:http://www.cnblogs.com/sky-heaven/p/5660291.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的cat /proc/maps 进程内存映射【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android 3.0 r1 API中文
- 下一篇: [转]利用ASP.NET 2.0创建自定