使用mmap来学习/proc/pid/smaps
💡
原文中文,约11000字,阅读约需26分钟。
📝
内容提要
在这篇文章中,作者通过使用/proc/pid/smaps来观测进程的状态,并解释了其中各个字段的含义。作者还通过编写代码来验证了文档中的描述,并讨论了一些特殊情况。最后,作者介绍了ASLR技术对smaps文件分析的影响,并给出了一些示例代码来说明不同情况下的输出结果。
🎯
关键要点
- 作者使用 /proc/pid/smaps 观测进程状态,主要用于观测栈大小和文件映射信息。
- 通过编写代码验证了 /proc/pid/smaps 文档中的描述,并讨论了特殊情况。
- 介绍了 /proc/pid/smaps 中各个字段的含义,如 Size、RSS、PSS 等。
- 提到读取 /proc/pid/maps 或 /proc/pid/smaps 时可能存在竞争条件,Linux 内核保证部分输出的正确性。
- ASLR 技术随机化进程地址空间布局,增加系统安全性,但也干扰 smaps 文件分析。
- 通过代码示例展示了如何分配内存并观察 smaps 输出,分析了 Rss 和 Pss 的变化。
- 使用 mmap 分配匿名页时,写操作会触发 copy-on-write 机制,导致物理内存分配。
- 分析了共享内存的 Rss 和 Pss 值,说明了它们之间的关系及计算方式。
- 通过不同的 mmap 参数(MAP_PRIVATE 和 MAP_SHARED)展示了内存共享和脏页的影响。
➡️