12.windbg-!address、!vadump、!vprot(读取内存状态)

来源:互联网 发布:闻道网络怎么样 编辑:程序博客网 时间:2024/05/18 03:05

!address

!address 扩展显示目标进程或目标机使用的内存信息

这个学习起来比较简单:我们直接使用!address -?就可以找到它的使用说明:

0:000> !address -?!address                 - prints information on the entire address space!address -?              - prints this help!address <address>       - prints available information about the region                           of the address space containing this address!address -summary        - prints only summary information!address -RegionUsageXXX - fiters the output limiting the dispaly to one                           of the following types:  RegionUsageIsVAD            - `busy` region that could be charcterized better                                 this includes Virtual-Alloc-ed blocks, SBH heap,                                 memory from custom allocators, etc  RegionUsageFree             - availalble (neither committed nor reserved) region  RegionUsageImage            - region used by mapped images of binaries  RegionUsageStack            - stack of threads  RegionUsageTeb              - TEB of threads   RegionUsageHeap             - region in used by a heap  RegionUsagePageHeap         - region in use by full page-heap  RegionUsagePeb              - PEB of the process  RegionUsageProcessParametrs - parameters of the process  RegionUsageEnvironmentBlock - environment block

那么一个个说明吧:

!address显示整个地址空间和使用摘要的信息

这个太长了,它会把从0-7ffefff的全打印出来,熟悉核心编程的应该知道,正常的2G用户地址空间是这样划分的:0-ffff为64K空指针区,10000-7ffeffff为用户模式分区

之后64K为禁入分区,之后就是内核模式分区,要看它们的信息,需要用到以下的表,

Filter显示的内存区域RegionUsageIsVAD"busy" 区域。包括所有 虚拟分配块、SBH堆、自定义内存分配器(custom allocators)的内存、以及地址空间中所有属于其他分类的内存块。RegionUsageFree目标的虚拟地址空间中所有可用内存。包括所有非提交(committed)和非保留(reserved)的内存。RegionUsageImage用来映射二进制映像的内存区域。RegionUsageStack用作目标进程的线程的堆栈的内存区域。RegionUsageTeb用作目标进程中所有线程的线程环境块(TEB)的内存区域。RegionUsageHeap用作目标进程的堆的内存区域。RegionUsagePageHeap用作目标进程的整页堆(full-page heap)的内存区域。RegionUsagePeb目标进程的进程环境块(PEB)的内存区域。RegionUsageProcessParametrs用作目标进程启动参数的内存区域。RegionUsageEnvironmentBlock用作目标进程的环境块的内存区域。

下面这些Filter值按照内存类型来指定内存。

Filter显示的内存类型MEM_IMAGE映射的文件属于可执行映像一部分的内存。MEM_MAPPED映射的文件不属于可执行映像一部分的内存。这种内存包含哪些从页面文件映射的内存。MEM_PRIVATE私有的(即不和其他进程共享)并且未用来映射任何文件的内存。

下面的Filter 值按照状态来指定内存:

Filter显示的内存状态MEM_COMMIT当前已提交给目标使用的所有内存。已经在物理内存或者页面文件中为这些内存分配了物理的存储空间。MEM_RESERVE所有为目标以后的使用保留的内存。这种内存还没有分配物理上的存储空间。MEM_FREE目标虚拟地址空间中所有可用内存。包括所有未提交并且未保留的内存。该Filter 值和RegionUsageFree一样。

比如一般30000不会被分配:

0:000> !address 30000 TEB 7efdd000 in range 7efdb000 7efde000 TEB 7efda000 in range 7efd8000 7efdb000 TEB 7efd7000 in range 7efd5000 7efd8000 ProcessParametrs 00641a40 in range 00640000 00648000 Environment 00640810 in range 00640000 00648000    00030000 : 00030000 - 00010000                    Type     00000000                     Protect  00000001 PAGE_NOACCESS                    State    00010000 MEM_FREE                    Usage    RegionUsageFree
表示输出表明这是以地址0x30000开头的一个大的内存区域,该区域中包含一个以0x30000 开头,大小为0x10000的小一些的区域。因此,这个小区域是从0x30000 到0x40000。它的内存类型为0、状态为 MEM_FREE、使用方式为RegionUsageFree。 (这些值的含义,查看前面的表格。) 

我们调用.dvalloc来强制分配

0:000> .dvalloc /b 30000 100Allocated 1000 bytes starting at 00030000
0:000> !address 30000 TEB 7efdd000 in range 7efdb000 7efde000 TEB 7efda000 in range 7efd8000 7efdb000 TEB 7efd7000 in range 7efd5000 7efd8000 ProcessParametrs 00641a40 in range 00640000 00648000 Environment 00640810 in range 00640000 00648000    00030000 : 00030000 - 00001000                    Type     00020000 MEM_PRIVATE                    Protect  00000040 PAGE_EXECUTE_READWRITE                    State    00001000 MEM_COMMIT                    Usage    RegionUsageIsVAD

!vadump

这个会显示所有的虚拟内存区域和它的保护属性

 

0:000> !vadumpBaseAddress:       00000000RegionSize:        00010000State:             00010000  MEM_FREEProtect:           00000001  PAGE_NOACCESSBaseAddress:       00010000RegionSize:        00010000State:             00001000  MEM_COMMITProtect:           00000004  PAGE_READWRITEType:              00040000  MEM_MAPPEDBaseAddress:       00020000RegionSize:        00010000State:             00010000  MEM_FREEProtect:           00000001  PAGE_NOACCESS


!vprot

!vprot扩展命令显示虚拟内存保护信息。可以用于活动调试和dump文件调试。

0:001> x test1!g_char00a67004 test1!g_char = 0x00a6573c "I am string"0:001> !vprot 00a67004 BaseAddress:       00a67000AllocationBase:    00a50000AllocationProtect: 00000080  PAGE_EXECUTE_WRITECOPYRegionSize:        00002000State:             00001000  MEM_COMMITProtect:           00000004  PAGE_READWRITEType:              01000000  MEM_IMAGE0:001> !vprot  30000BaseAddress:       00030000AllocationBase:    00000000RegionSize:        00010000State:             00010000  MEM_FREEProtect:           00000001  PAGE_NOACCESS





 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果下载app慢怎么办 苹果手机突然很难充进电怎么办 winsxs误删了怎么办 cad打开有问号怎么办 网络连接超时怎么办 宽带 绝地求生很卡怎么办 吃鸡更新错误怎么办 iac账号封号了怎么办 凭证号不连续怎么办 我的世界延迟怎么办 黄金棒打不开怎么办 枪火游侠黑屏怎么办 老虎直播封了怎么办 网卡及驱动异常怎么办 电脑刺激战场卡怎么办 grub 文件兼容性错误怎么办 电脑程序不兼容怎么办 运行程序不兼容怎么办 usb驱动删了怎么办 电脑卡死 点不开怎么办 电脑开机找不到驱动程序怎么办 显卡关了黑屏怎么办 xp全部程序打不开怎么办 七彩凤电脑打不开怎么办 鹦鹉鱼不敢吃食怎么办 甘油三酯1.87怎么办 手机移动数据网打不开怎么办 苹果手机浏览器打不开没网怎么办 玩多人游戏很紧张怎么办 dnf容易掉线怎么办 qq名字改不了怎么办 手被打火机烧伤怎么办 无效的菜单句柄怎么办 网课被发现刷课怎么办 华硕笔记本玩游戏卡怎么办 手机玩游戏卡顿怎么办? 360n4s玩游戏卡怎么办 手机玩游戏卡死怎么办 游戏占用cpu过高怎么办 h1z1 cpu占用高怎么办 电视盒子网速慢怎么办