/proc/pid/maps顯示進(jìn)程映射了的內(nèi)存區(qū)域和訪問(wèn)權(quán)限。對(duì)應(yīng)內(nèi)核中的操作集為proc_pid_maps_op,具體的導(dǎo)出函數(shù)為show_map。
內(nèi)核中進(jìn)程的一段地址空間用一個(gè)vm_area_struct結(jié)構(gòu)體表示,所有地址空間存儲(chǔ)在task->mm->mmap鏈表中。
b6d01000-b6d73000 r-xp 00000000 b3:19 1118 /system/lib/libc.so
b6d73000-b6d77000 r--p 00071000 b3:19 1118 /system/lib/libc.so
b6d77000-b6d7a000 rw-p 00075000 b3:19 1118 /system/lib/libc.so
b6d7a000-b6d84000 rw-p 00000000 00:00 0
b6d84000-b6e0c000 r-xp 00000000 b3:19 1117 /system/lib/libc++.so
b6e0c000-b6e0d000 ---p 00000000 00:00 0
b6e0d000-b6e11000 r--p 00088000 b3:19 1117 /system/lib/libc++.so
b6e11000-b6e12000 rw-p 0008c000 b3:19 1117 /system/lib/libc++.so
b6e12000-b6e13000 rw-p 00000000 00:00 0
b6e13000-b6e3b000 r-xp 00000000 b3:19 1348 /system/lib/libwilhelm.so
第一列:虛擬地址空間的開始和結(jié)束地址vm_start-vm_end 。
第二列:虛擬地址空間的屬性vm_flags 。
每種屬性用一個(gè)字段:
r表示可讀,w表示可寫,x表示可執(zhí)行,p和s共用一個(gè)字段,互斥關(guān)系,p表示私有段,s表示共享段,如果沒(méi)有相應(yīng)權(quán)限,則用-代替。
第三列:映射偏移。vm_pgoff 對(duì)有名映射,表示此段虛擬內(nèi)存起始地址在文件中以頁(yè)為單位的偏移。對(duì)匿名映射,它等于0或者vm_start/PAGE_SIZE。
第四列:映射文件所屬設(shè)備號(hào)。對(duì)匿名映射來(lái)說(shuō),因?yàn)闆](méi)有文件在磁盤上,所以沒(méi)有設(shè)備號(hào),始終為00:00。對(duì)有名映射來(lái)說(shuō),是映射的文件所在設(shè)備的設(shè)備號(hào)。
第五列:映射文件所屬節(jié)點(diǎn)號(hào)。對(duì)匿名映射來(lái)說(shuō),因?yàn)闆](méi)有文件在磁盤上,所以沒(méi)有節(jié)點(diǎn)號(hào),始終為0。對(duì)有名映射來(lái)說(shuō),是映射的文件的節(jié)點(diǎn)號(hào)。
第六列:映射文件名或堆、棧。對(duì)有名來(lái)說(shuō),是映射的文件名。對(duì)匿名映射來(lái)說(shuō),是此段虛擬內(nèi)存在進(jìn)程中的角色。[stack]表示在進(jìn)程中作為棧使用,[heap]表示堆。其余情況則無(wú)顯示。