1. 程式人生 > >proc//maps檔案格式

proc//maps檔案格式

程式設計師的自我修養 第六章 可執行檔案的裝載與程序 P168

/proc/<pid>/maps檔案存放程序的虛擬空間的分佈,示例如下:

7f23a6e30000-7f23a6e4d000 r-xp 00000000 08:05 9050308  /lib/x86_64-linux-gnu/libselinux.so.1

7f23a6e4d000-7f23a704c000 ---p 0001d000 08:05 9050308  /lib/x86_64-linux-gnu/libselinux.so.1
7f23a704c000-7f23a704d000 r--p 0001c000 08:05 9050308  /lib/x86_64-linux-gnu/libselinux.so.1

7f23a704d000-7f23a704e000 rw-p 0001d000 08:05 9050308  /lib/x86_64-linux-gnu/libselinux.so.1

    第一列是VMA的地址範圍。在Linux中將程序虛擬空間中的一個段叫做虛擬記憶體區域VMA(Virtual Memory Area)。VMA對應ELF檔案中的segment。ELF檔案有section和segment的概念。從連結的角度看,ELF是按照Section儲存的,事實也的確如此;從裝載的角度看,ELF檔案又按照Segment進行劃分,這是為了防止按照section裝載時造成的內部碎片。segment相當與是將多個屬性(讀寫執行)相同的section合併在一起進行。program headers 存放segment的資訊;section table存放section的資訊.

    第二列是VMA的許可權。p代表私有(COW,copy on write)。s代表共享。

    第三列是偏移。表示VMA對應的segment在映像檔案中的偏移。

    第四列是主裝置號和次裝置號。

    第五列表示映像檔案的節點號。inode

    第六列是映像檔案的路徑。