linux proc pid maps 資訊分析

2021-06-19 10:22:06 字數 1942 閱讀 4780

接下來看看maps

[root@localhost proc]# cat /proc/1/maps

00110000-00111000 r-xp 00110000 00:00 0          [vdso]

0032b000-00347000 r-xp 00000000 fd:00 852733     /lib/ld-2.8.so

00347000-00348000 r--p 0001c000 fd:00 852733     /lib/ld-2.8.so

00348000-00349000 rw-p 0001d000 fd:00 852733     /lib/ld-2.8.so

0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so

004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so

004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so

004b1000-004b4000 rw-p 004b1000 00:00 0 

08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init

08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init

08b42000-08b6a000 rw-p 08b42000 00:00 0          [heap]

b8046000-b8048000 rw-p b8046000 00:00 0 

bfb4e000-bfb63000 rw-p bffeb000 00:00 0          [stack]

一共有6列

第一列代表記憶體段的虛擬位址

第二列代表執行許可權,r,w,x不必說,p=私有 s=共享

不用說,heap和stack段不應該有x,否則就容易被xx,不過這個跟具體的版本有關

第三列代表在程序位址裡的偏移量

第四列對映檔案的主裝置號和次裝置號

通過 cat /proc/devices

第五列映像檔案的節點號,即inode

第六列是映像檔案的路徑

以前我很奇怪怎麼會有兩個相同的檔案路徑,原來

08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init

08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init

乙個是唯讀的,是**段,乙個是讀寫的,是資料段

至於為什麼共享庫分成了三個

0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so

004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so

004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so

其中的004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so

還是不能理解

最後看看神秘的memmap

可惜不是所有的版本都有這個檔案,如同我這裡的情況

只有口頭說一說了,memmap需要和maps配合看

顯示出來的每一行代表maps裡的乙個段

每一行的每乙個數字,代表那個段裡的乙個頁,段有多大,一行就有對應的多少個數字

如果這個數字是0,代表系統為其分配了虛擬記憶體,但是沒有分配物理記憶體

如果有數字,則代表系統為其分配了物理記憶體,以及有多少個程序引用了這個頁

當然,不會有負數出現

組織星期資訊 (10 分)

組織星期資訊 10 分 輸入乙個正整數repeat 0定義乙個指標陣列將下面的星期資訊組織起來,輸入乙個字串,在表中查詢,若存在,輸出該字串在表中的序號,否則輸出 1。sunday monday tuesday wednesday thursday friday saturday 輸入輸出示例 括號...

7 3 輸入書籍資訊 10分

編寫程式,從鍵盤輸入 n n 10 本圖書的名稱 定價並存入結構陣列中,輸出圖書資訊。輸入輸出示例 括號內為說明,無需輸入輸出.3 n 3 programming in c 21.5 programming in vb 18.5 programming in delphi 25programming...

6 4 建立學生資訊鍊錶 (20 分

本題要求實現乙個將輸入的學生成績組織成單向鍊錶的簡單函式。函式介面定義 void input 該函式利用scanf從輸入中獲取學生的資訊,並將其組織成單向鍊錶。鍊錶節點結構定義如下 struct stud node 單向鍊錶的頭尾指標儲存在全域性變數head和tail中。輸入為若干個學生的資訊 學號...