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
查看当前进程堆