我试图使用pmap -x
命令查看 Linux x86-64 上进程的内存映射。我对 pmap 的输出感到困惑。特别是对于映射动态库的条目。它们有多个条目(实际上大多数都是 4 个条目,有些有 3 个条目)。下面是一个例子
Address Kbytes RSS Dirty Mode Mapping
00000036ca200000 88 64 0 r-x-- libpthread-2.5.so
00000036ca216000 2044 0 0 ----- libpthread-2.5.so
00000036ca415000 4 4 4 r---- libpthread-2.5.so
00000036ca416000 4 4 4 rw--- libpthread-2.5.so
每个库的第二行的大小始终为 2MB,但没有页面权限。在所有图书馆中,它的 RSS 似乎总是为零。最后两行也具有相同的大小(这是基本页面大小)和相同的权限(少数库没有 rw 映射)。
有人对此有什么解释吗?我有一种感觉,可能具有只读保护的映射是由加载器完成的,以读取库的元数据,而具有可执行权限的部分实际上是库的代码。不过我可能是错的。
但我对中间那一排一无所知。没有权限也没有用途?有人在这里有一些智慧的话吗?
我还看到有几页报告在匿名内存上,并且没有设置任何模式位。这些代表什么?