1

我正在编写一个内核模块,它将接受用户进程 id ( PID) 作为输入并转储该用户进程的所有地址空间,如堆​​栈、堆段。

我把mm->start_brk作为堆的开始,mm->brk作为堆的结束,然后我看到,即使用户进程没有使用 33 页,堆大小显示为 33 页(mm->brk- mm->start_brk)。(这我使用验证/proc/pid/maps)。Stack 也有类似的行为。

那么有什么办法可以找出真正使用的堆mm->start_brk,这样我就可以只转储使用的堆。

4

1 回答 1

2

brk进程可以使用和分配内存mmap。后者不会改变堆,而是单独分配。

mm->mmap是由 . 创建的映射的链表mmap

于 2012-05-15T07:11:22.720 回答