使用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)展示了内存共享和脏页的影响。
➡️

继续阅读