在 WinDbg (经典) 中查看和编辑内存

在 WinDbg 中,可以通过输入命令或使用“内存”窗口来查看和编辑内存。

调试器命令窗口

可以通过在“调试器命令”窗口中输入其中一个 “显示内存 ”命令来查看内存。 可以通过在“调试器命令”窗口中输入“ 输入值” 命令之一来编辑内存。 有关详细信息,请参阅 按虚拟地址访问内存按物理地址访问内存

打开“内存”窗口

若要打开“内存”窗口,请从“视图”菜单中选择“内存”。 (还可以按 Alt+5 或选择 “内存 ”按钮 (WinDbg 中“内存”按钮的屏幕截图。

以下屏幕截图显示了“内存”窗口的示例。

WinDbg 中示例“内存”窗口的屏幕截图。

使用内存窗口

“内存”窗口以多个列显示数据。 窗口左侧的列显示每行的起始地址。 其余列从左到右显示请求的信息。 如果在“显示格式”菜单中选择“字节”,则与这些字节对应的 ASCII 字符将显示在窗口右侧。

注意 默认情况下,“内存”窗口显示虚拟内存。 此类型的内存是在用户模式下唯一可用的内存类型。 在内核模式下,可以使用“ 内存选项 ”对话框显示物理内存和其他数据空间。 本主题稍后将介绍 “内存选项 ”对话框。

在“内存”窗口中,可以执行以下操作:

  • 若要写入内存,请在“内存”窗口中选择并键入新数据。 只能编辑十六进制数据,不能直接编辑 ASCII 和 Unicode 字符。 键入新信息后,更改将立即生效。

  • 若要查看内存的其他部分,请使用“内存”窗口工具栏上的 “上一 步”和“ 下一步 ”按钮,或按 PAGE UP 或 PAGE DOWN 键。 这些按钮和键显示紧靠前面或后面的内存部分。 如果请求无效页面,将显示一条错误消息。

  • 若要在窗口中导航,请使用向右键、向左键、向上键和向下键。 如果使用这些键移出页面,则会显示一个新页面。 使用这些键之前,应调整内存窗口的大小,使其没有滚动条。 通过此大小调整,可以区分实际页面边缘和窗口截断。

  • 若要更改正在查看的内存位置,请在“内存”窗口顶部的地址框中输入新地址。 请注意,“内存”窗口在输入地址时会刷新其显示,因此在键入地址之前可能会收到错误消息。

    注意 输入到框中的地址将解释为当前基数。 如果当前基数不是 16,则应在十六进制地址前面加上 0x。 若要更改默认基数,请在“调试器命令”窗口中使用 n (Set Number Base) 命令。 内存窗口本身中的显示不受当前基数的影响。

  • 若要更改窗口用于显示内存的数据类型,请使用“内存”窗口工具栏中的“ 显示格式 ”菜单。 支持的数据类型包括短字、双字和四字;短整数、长整数和四整数和无符号整数;10 字节、16 字节、32 位和 64 位实数;ASCII 字符;Unicode 字符;和十六进制字节。 十六进制字节的显示也包括 ASCII 字符。

“内存”窗口有一个工具栏,其中包含两个按钮、一个菜单和一个框,并具有包含其他命令的快捷菜单。 若要访问菜单,请选择并按住 (或右键单击) 标题栏,或选择工具栏上窗口右上角附近的图标。 Alt+SHIFT+5 关闭活动内存窗口。

  • (工具栏仅) 使用地址框可以指定新的地址或偏移量。 此框的确切含义取决于你正在查看的内存类型。 例如,如果正在查看虚拟内存,则通过框可以指定新的虚拟地址或偏移量。

  • (工具栏仅) 显示格式 可用于选择新的显示格式。

  • (工具栏和菜单) 工具栏) 上的 上一 个 (和快捷菜单上的 上一页 () 导致显示上一部分内存。

  • (工具栏和菜单) 工具栏) 上的 “下一 ( ”和快捷菜单上的 “下一页 ” (,) 显示下一部分内存。

  • (菜单仅) 工具栏 打开和关闭工具栏。

  • (菜单仅) 自动调整列 可确保“内存”窗口中显示的列数符合“内存”窗口的宽度。

  • (菜单仅) 停靠取消停靠 会导致窗口进入或离开停靠状态。

  • (菜单仅) 移动到新扩展坞 会关闭“内存”窗口并在新扩展坞中打开它。

  • (菜单仅) 设置为窗口类型的选项卡停靠目标 会将所选内存窗口设置为其他内存窗口的选项卡停靠目标。 选择一个作为选项卡停靠目标后打开的所有内存窗口将自动与选项卡式集合中的该窗口分组。

  • (菜单仅) 始终浮动 会导致窗口保持未停靠状态,即使它被拖动到停靠位置。

  • (菜单仅) 移动框架 会导致在移动 WinDbg 框架时窗口移动,即使窗口未停靠也是如此。

  • (菜单仅) 属性 将打开 “内存选项 ”对话框,本主题的下一部分对此进行介绍。

  • (菜单仅) 帮助 打开 Windows 调试工具文档中的本主题。

  • (菜单仅) 关闭 会关闭此窗口。

“内存选项”对话框

在快捷菜单中选择“ 属性” 时,将显示“ 内存选项 ”对话框。

在内核模式下,有六种内存类型可用作此对话框中的选项卡: 虚拟内存物理内存总线数据控制数据I/O (I/O 端口信息) ,以及 MSR (模型特定的寄存器信息) 。 选择与要访问的信息对应的选项卡。

在用户模式下,只有“ 虚拟内存 ”选项卡可用。

通过每个选项卡,可以指定要显示的内存:

  • 在“ 虚拟内存 ”选项卡的“ 偏移量 ”框中,指定要查看的内存范围开头的地址或偏移量。

  • 在“ 物理内存 ”选项卡的“ 偏移量 ”框中,指定要查看的内存范围开头的物理地址。 “内存”窗口只能显示描述的可缓存物理内存。 如果要显示具有其他属性的物理内存,请使用 d* (Display Memory) 命令或 !d\* 扩展。

  • 在“ 总线数据 ”选项卡的“ 总线数据类型 ”菜单中,指定总线数据类型。 然后,使用 “总线编号”、“ 槽号”和“ 偏移量 ”框指定要查看的总线数据。

  • 在“ 控制数据 ”选项卡中,使用“ 处理器 ”和“ 偏移量 ”文本框指定要查看的控件数据。

  • 在“ I/O ”选项卡的“ 接口类型 ”菜单中,指定 I/O 接口类型。 使用 “总线编号”、“ 地址空间”和“ 偏移量 ”框指定要查看的数据。

  • 在“ MSR ”选项卡的“ MSR ”框中,指定要查看的特定于模型的寄存器。

每个选项卡还包括“ 显示格式 ”菜单。 此菜单的效果与“内存”窗口中的 “显示格式 ”菜单相同。

在“内存选项”对话框中选择“确定”,使更改生效。

其他信息

有关内存操作和其他内存相关命令的说明的详细信息,请参阅 读取和写入内存