В качестве ответа на вопрос 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. Virtual Memory», которая
# 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
структур данных.
спасибо.
Итак, вы говорите, что каждый модуль (если, например, я рассматриваю модуль как исполняемый файл эльфа с несколькими разделами), будет иметь несколько структур данных 'vm_area_struct'. ? –