Windbg学习 (0x000d) 命令-内存控制

d  

d{a|b|c|d|D|f|p|q|u|w|W} [Options] [Range]

dy{b|d} [Options] [Range]

d [Options] [Range]

 

Option 可以为 : /c <数字> /p <数字>    L<数字>

   /c :  定义显示的列数 

  /p 内核使用 显示物理内存信息

 

  L :显示长度  默认显示64个字节,但是可以通过 L<数字> 显式指定显示多少个字节

 

基本类型命令 d、da、db、dc、dd、dD、df、dp、dq、du、dw、dW、dyb、dyd、ds、dS。

  基本类型

  • dw = 双字节WORD格式;
  • dd = 4字节DWORD格式 ;
  • dq = 8字节格式;
  • df = 4字节单精度浮点数格式;
  • dD =8字节双精度浮点数格式;
  • dp = 指针大小格式,32位系统下4字节,64位系统下为8字节;

  基本字符串

  • da = ASCII字符串格式;
  • du = UNICODE字符串格式;
  • db =字节 + ASCII字符串;
  • dW = 双字节WORD + ASCII字符串;
  • dc = 4字节DWORD + ASCII字符串;

  高级字符串:

  • ds = ANSI_STRING类型字符串格式;
  • dS = UNICODE_STRING类型字符串格式;

  二进制 + 基本类型

  • byb = 二进制 + 字节;
  • byd = 二进制 + DWORD值;

数组类型命令 dda, ddp、 ddu、dds、dpa、dpp、dpu、dps、dqa、dqp、dqu、dqs

链表类型命令 dl  

查看数据结构 dt

!address

  •  !address:不加任何参数,在用户模式下此命令将以内存块为单位,列出从地址0开始到0×80000000的全部地址空间信息;内核模式下,将列出从地址0×80000000开始到0xFFFFFFFF的全部地址空间信息

  内存类型:即Type值,共有四种:第一种是什么都不是,即尚未被使用的;第二种是MEM_IMAGE,即地址映射于一个可执行镜像文件片段,如DLL文件;第三种是MEM_ MAPPED,即地址映射于不可执行的镜像文件片段,如页文件;第四种是MEM_PRIVATE,即私有有内存,这里的私有是针对进程而言的,私有内存无法在多个进程间共享;

  保护模式:即Protect值,上例中见识了两种保护模式,NOACCESS和READWRITE。从字面即很容易理解其意思,前者是不能做任何访问的,因为空闲内存是无效内存;后者则可读可写,但不能执行,说明是保存数据的地方。所有可用的保护包括:PAGE_NOACCESS(不可访问),PAGE_READONLY(只读),PAGE_READWRITE(读写),PAGE_EXECUTE(可执行), PAGE_EXECUTE_READ(执行并可读),PAGE_EXECUTE_READWRITE(执行并可读写),PAGE_WRITECOPY(写时拷贝),PAGE_EXECUTE_WRITECOPY(执行,并写时拷贝), PAGE_GUARD(保护)。

  内存状态:即State值,共三种:MEM_FREE,即空闲内存;MEM_RESERVED,即保留内存,保留内存尚不能被实际使用,但其地址空间已被预留,尚需一个提交动作。最后是MEM_COMMIT,即内存已被提交,正在被使用。

  内存用途:即Usage值:

    • RegionUsageIsVAD:表示此地址区域已被分配;RegionUsageFree:代表此地址区域已被释放,既没有保留也没有被提交,将来可以申请使用;
    • RegionUsageImage:代表此地址区域被映射到二进制文件的镜像;Region UsageStack:代表此地址区域用于线程栈;RegionUsageTeb:代表此地址区域用于保存目标进程的所有线程的TEB结构;
    • RegionUsageHeap:代表此地址区域用于堆内存;RegionUsage Pdb:代表此地址区域用于保存目标进程的PEB结构;RegionUsageProcessParameters:代表此内存块用于保存目标进程的启动参数;
    • RegionUsageEnviromentBlock:代表此地址区域用于保存目标进程的环境块。
  • !address  -summary:用户环境下可使用下面的命令显示内存统计信息,包括内存用途、内存类型、内存状态

s 搜索内存 

s [-[[Flags]Type]] Range Pattern

s -[[Flags]]v Range Object

s -[[Flags]]sa Range

s -[[Flags]]su Range

e 修改内存 

e{b|d|D|f|p|q|w} Address [Values]

e{a|u|za|zu} Address "String"

e Address [Values]

!filecache

 查看文件缓存

!heap

查看当前进程堆 

原文地址:https://www.cnblogs.com/ywnwa417/p/5678330.html