作爲對Traversing all the physical pages of a process的回答和這裏的數據http://www.makelinux.net/ldd3/chp-15-sect-1的擴展,我有一個小問題。在所建議的遍歷過程的物理頁的第一個答案,穿越`vm_area_struct`的過程
struct vm_area_struct *vma = 0;
unsigned long vpage;
if (task->mm && task->mm->mmap)
for (vma = task->mm->mmap; vma; vma = vma->vm_next)
for (vpage = vma->vm_start; vpage < vma->vm_end; vpage += PAGE_SIZE)
unsigned long phys = virt2phys(task->mm, vpage);
並參照在標題爲「15.1.6。虛擬存儲器區」,這是
下的第二連桿給出的例子現在# cat /proc/1/maps look at init
08048000-0804e000 r-xp 00000000 03:01 64652 /sbin/init text
0804e000-0804f000 rw-p 00006000 03:01 64652 /sbin/init data
0804f000-08053000 rwxp 00000000 00:00 0 zero-mapped BSS
40000000-40015000 r-xp 00000000 03:01 96278 /lib/ld-2.3.2.so text
40015000-40016000 rw-p 00014000 03:01 96278 /lib/ld-2.3.2.so data
我的問題是,因爲我將遍歷的vm_start
和vm_end
爲第一區域中的值是08048000
和0804e000
,還是會08048000
和08053000
(一個連續的內存塊)。我應該編寫一個程序並自己嘗試,但是我將這些數據用於另一個項目,如果有人能夠幫助理解這一點,這將非常有幫助。我基本上想知道的是,如果
08048000-0804e000 r-xp 00000000 03:01 64652 /sbin/init text
0804e000-0804f000 rw-p 00006000 03:01 64652 /sbin/init data
0804f000-08053000 rwxp 00000000 00:00 0 zero-mapped BSS
是一個「模塊」屬於過程,它有一個或多個vm_area_struct
數據結構。
謝謝。
所以你說每個模塊(例如,如果我認爲一個模塊作爲一個可執行多個部分的elf)將有多個'vm_area_struct'數據結構。 ? –