VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程
- [VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程](#VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程)
-
- [1. 如何启动 VMMap(正确姿势)](#1. 如何启动 VMMap(正确姿势))
- [2. 选择要分析的进程](#2. 选择要分析的进程)
-
- 怎么选目标进程?给你三类常见策略:
-
- [策略 A:我就想分析内存暴涨的那个进程](#策略 A:我就想分析内存暴涨的那个进程)
- [策略 B:我想分析登录用户自己的工作区](#策略 B:我想分析登录用户自己的工作区)
- [策略 C:我要看系统级核心进程/高权限进程](#策略 C:我要看系统级核心进程/高权限进程)
- [3. 常见问题:为什么我点进程会报"访问被拒绝"?](#3. 常见问题:为什么我点进程会报“访问被拒绝”?)
-
- [情况 1:权限不够](#情况 1:权限不够)
- [情况 2:进程属于别的会话](#情况 2:进程属于别的会话)
- [情况 3:进程瞬时退出](#情况 3:进程瞬时退出)
- [4. 附加成功后你会看到什么界面?](#4. 附加成功后你会看到什么界面?)
-
- [4.1 内存类型汇总表(表格区,核心区)](#4.1 内存类型汇总表(表格区,核心区))
- [4.2 图形视图(饼图/条图)](#4.2 图形视图(饼图/条图))
- [4.3 底部或子标签页:区域细节 / 时间线快照](#4.3 底部或子标签页:区域细节 / 时间线快照)
- [5. 进程选错了?可以切换吗?](#5. 进程选错了?可以切换吗?)
- [6. 初次抓取后要做的第一件事:保存快照](#6. 初次抓取后要做的第一件事:保存快照)
- [7. 实战建议小抄](#7. 实战建议小抄)
- [8. 本篇小结](#8. 本篇小结)
VMMap 学习笔记(8.2):启动 VMMap、选择目标进程、权限要求与首次快照流程
这篇是一个"上手即实战"的章节,我们会解决四个最关键的问题:
- VMMap 要怎么启动,32 位 / 64 位有没有讲究?
- 附加到哪个进程,系统进程和普通业务进程有什么差别?
- 为什么有时候提示 Access Denied(访问被拒绝)?怎么提权?
- 进入进程后,那些花花绿绿的内存表格和饼图,代表什么"初始状态"?
如果你能把这一章都做到,基本就已经具备"抓现场证据"的能力了,后面章节就是在这个基础上做分析、对比和报告。
1. 如何启动 VMMap(正确姿势)
步骤非常简单:
- 解压 Sysinternals 套件中的
vmmap.exe。 - 双击运行
vmmap.exe(建议右键 → 以管理员身份运行)。 - 第一次启动会弹出 EULA(许可协议),点 Accept 即可。
要注意的两个点:
32 位 vs 64 位
- 在 64 位 Windows 上,你通常会拿到一个 64 位 VMMap。
- 它可以分析 64 位进程,也可以分析大多数 32 位进程(WOW64 进程)。
- 但在极少数场景下,分析不同架构的进程可能受限,比如特别受保护的系统服务。遇到权限报错别慌,后面说提权方法。
建议直接管理员启动
- 不是所有进程都能用普通用户权限读取,比如
lsass.exe、系统服务、杀软内核代理进程。 - 如果你只是调业务进程(例如你自己写的服务、浏览器、游戏客户端等),普通权限往往也行。
- 如果你是做内存审计/取证/应急,那请直接"以管理员身份运行"。
👉 小结一句:平时调业务可以普通启动,做安全/深度定位请直接管理员启动。
2. 选择要分析的进程
启动 VMMap 之后,第一屏通常不是图表,而是一个"Select Process(选择进程)"窗口,列出系统当前正在运行的所有进程。
你会看到几列典型字段:
- 进程名(例如
chrome.exe、sqlservr.exe、explorer.exe) - PID(进程 ID)
- 位数(32-bit / 64-bit)
- 用户(哪个账号在运行)
- 命令行(启动路径或参数,有时可以看出该进程用途,比如是哪个实例)
怎么选目标进程?给你三类常见策略:
策略 A:我就想分析内存暴涨的那个进程
- 打开任务管理器,按内存排序,记下那个进程的名字和 PID。
- 回到 VMMap → 找到同名/同 PID 的进程 → 双击。
- 这是"服务内存泄漏定位"的常规入口。
适用:后端服务、图形程序、浏览器某个标签页进程、Electron 应用等。
策略 B:我想分析登录用户自己的工作区
- 典型对象:
explorer.exe(桌面/外壳)、Teams.exe、WeChat.exe、Discord.exe、Photoshop.exe。 - 这种通常运行在当前交互式用户会话下,权限也更好拿到,无需太多提权。
适用:排查"这软件为什么一开就占 2GB"。
策略 C:我要看系统级核心进程/高权限进程
例如:
svchost.exe某个实例(承载很多系统服务)- 安全软件的 agent 进程
- 驱动层配套的用户态守护进程
- 数据库或关键业务守护进程(运行在 LocalSystem / 服务账户下)
这种往往是管理员视角,而且很可能是你作为运维/应急人员被叫去救火的那种场景。
⚠️ 这种情况下,普通权限常会直接报:
- Access Denied / 无法附加
- 无法读取进程内存
解决方式详见下一节"权限问题"。
3. 常见问题:为什么我点进程会报"访问被拒绝"?
这是新手第一次用 VMMap 时 100% 会遇到的坑。
原因通常有三类:
情况 1:权限不够
- 系统服务、杀软、防护类进程、LocalSystem 级别的后端服务,普通用户没有权利随意读它们的内存空间。
- 解决:右键 VMMap → 以管理员身份运行 → 再选该进程。
管理员权限 ≠ SYSTEM 权限,但足以处理绝大多数业务/服务类进程。极少数高强度防护进程(如 EDR Agent)可能依然拒绝访问,这是安全策略,不是你错了。
情况 2:进程属于别的会话
- Windows 存在多会话:服务在会话 0,普通用户在会话 1/2/...
- 某些情况下,你当前用户不在同会话,读不到别的会话的内存。
- 管理员权限会极大缓解这件事。
情况 3:进程瞬时退出
-
你刚点它,它就崩了 / 重启了 / 被回收了,VMMap 自然拿不到。
-
典型例子:短命的辅助进程、崩溃自重启服务、浏览器子进程。
-
解决:
- 重新打开进程列表
- 尽快选中主进程(例如浏览器主进程,而不是临时子进程)
- 或者在"问题刚发生时"立刻抓快照(后面章节会讲快照的意义)。
4. 附加成功后你会看到什么界面?
一旦 VMMap 成功附加到进程,你会看到主界面,大致由三块组成(界面略有版本差异,但逻辑一致):
4.1 内存类型汇总表(表格区,核心区)
这是 VMMap 的灵魂。你会看到一行行类似:
- Private Data / Private Bytes
- Heap
- Stack
- Image
- Mapped File
- Shareable
- Free
- ...
每一行后面会有很多列,比如:
- Total Size(虚拟地址空间大小)
- Committed(提交量)
- Private(私有)
- Working Set / WS(当前驻留物理内存)
- Shareable / Shared(这块内存是否与其他进程共享)
- ...等等
这一屏就是你在做"这进程到底吃到哪去了"的大方向判断。
举例:
- Heap 占比极大 → 业务逻辑(申请内存后没释放,典型内存泄漏)
- Stack 很多 → 线程太多,线程没回收
- Mapped File 巨大 → 这个进程疯狂映射了外部资源(贴图/视频帧/模型/日志/数据库页)
- Image 巨大 → 装载了大量 DLL / 模块,比如浏览器插件、DirectX 组件、图形/AI 加速模块等
4.2 图形视图(饼图/条图)
通常会给你一眼直觉:这个进程的内存使用结构像不像"堆怪兽"。
- 如果一大块都是 Private/Heap,那通常是程序自己不停 malloc/new(或 .NET/Java 大对象分配)。
- 如果映射类内存(Mapped File)占优势,那可能是资源型程序(浏览器、大型游戏、音视频/渲染管线、数据库缓存)。
这是特别适合在汇报/复盘PPT里截图的一块。
4.3 底部或子标签页:区域细节 / 时间线快照
- 你可以切到详细视图,看到具体地址区间(Base Address、Size、Protection、Type)。
- 你也可以拍"快照"(Snapshot),然后后面比较两次快照的差异。
别急,快照和时间对比我们下一章会详细讲(内存时间线 & 快照对比是 VMMap 的隐藏杀器,用于证明"它在涨")。
5. 进程选错了?可以切换吗?
可以。
在菜单里(通常是 File → Select Process... 或者工具栏上类似"Open Process"按钮),你可以回到进程列表重新选择目标,而不用重启 VMMap。
实际使用中这很方便,比如:
- 先看浏览器主进程,
- 再切到游戏客户端进程,
- 再切到后端服务进程,
- 最后对每个进程都做一个快照留存,做横向对比。
建议你操作时关掉"会频繁重启/瞬时退出"的进程,优先分析稳定进程,减少"刚切过去就没了"的挫败感。
6. 初次抓取后要做的第一件事:保存快照
这是很多人忽略但真的很关键的一步。
为什么现在就要保存?
- 当前状态 = 现场证据。
- 如果你的目标是"抓内存泄漏",你要有 T0(现在)这个基线,后面过 5 分钟 / 30 分钟 / 两小时 再来拍 T1/T2/T3。
- 没有 T0,你后面就没法证明"它在涨"。
在 VMMap 里你可以用菜单(一般是 Save、Snapshot、Save Snapshot 等字样)导出当前状态为一个 .mmp/.vmmap(不同版本扩展名可能略有差别)文件。
这些快照文件后续都能重新加载,做对比分析。
翻译成人话:点一次保存,就等于把"这个进程此时此刻的内存账本"封存成证据。
7. 实战建议小抄
最后我给你一套我平时真实用的流程模板,拿去就能干活:
-
以管理员身份启动 VMMap
避免后面各种 Access Denied。
-
选择高内存进程(或嫌疑目标进程)
参考任务管理器 / 报告的 PID。
-
观察汇总表:哪一类最大?
- Heap?→ 业务分配 / 泄漏嫌疑
- Stack?→ 线程风暴
- Mapped File?→ 资源贴图 / 文件映射
- Image?→ 模块爆炸(插件、驱动级组件过多)
-
立刻保存快照,标记为 T0
命名建议:
processname_PID_timestamp.mmp例如:
GameClient_1234_2025-10-25-14-32.mmp -
隔一段时间再拍 T1 / T2
如果 Heap 一直长,那你可以非常硬地告诉研发:"不是 OS 问题,是你们堆一直在涨。"
-
把图形饼图 + 堆/映射/栈分布截图
这是汇报材料、复盘 PPT、问题工单 的黄金素材,领导和开发都能一眼看懂。
8. 本篇小结
到这里,你已经能做三件超实用的事了:
- 把 VMMap 正确启动并指到一个进程(尤其是大内存嫌疑进程)。
- 用管理员权限避免"访问被拒绝"阻碍调查。
- 在第一次接触目标进程时就留存一个"内存状态快照",为后续的泄漏分析打下基准线。
下一篇我们会写:
VMMap 学习笔记(8.3):VMMap 主界面详解------内存类型、指标含义、颜色块怎么看?
也就是把你刚刚看到的那张大表,彻底读懂。
看懂那张表之后,你就能开始写"这是内存泄漏"的结论,不再只是"我觉得它占用有点高"这种没说服力的主观看法。