zoukankan      html  css  js  c++  java
  • WinDbg常用命令系列---!address

    !address

    这个!address扩展命令显示有关目标进程或目标计算机使用的内存的信息。

    用户模式:

    !address Address
    !address -summary 
    !address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
    !address -? | -help
    

    内核模式:

    !address Address 
    !address
    

    参数:

    • Address
      仅显示包含地址的地址空间区域。
    • -summary
      仅显示摘要信息。
    • -f:F1, F2, ...
      仅显示由筛选器f1、f2等指定的区域。
      以下筛选器值通过目标进程使用内存区域的方式指定内存区域。
      筛选器值显示的内存区域

      VAR

      繁忙地区。这些区域包括所有虚拟分配块、sbh堆、来自自定义分配程序的内存以及地址空间中不属于其他分类的所有其他区域。

      Free

      自由内存。这包括所有尚未保留的内存。

      Image

      映射到作为可执行映像一部分的文件的内存。

      Stack

      用于线程堆栈的内存。

      Teb

      用于线程环境块 (Teb) 的内存。

      Peb

      使用进程环境块 (PEB) 内存。

      Heap

      使用的堆内存量。

      PageHeap

      用于在整页堆的内存区域。

      CSR

      CSR 共享内存。

      Actx

      用于激活上下文数据的内存。

      NLS

      用于区域语言支持 (NLS) 的表的内存。

      FileMap

      内存映射文件使用的内存。 此筛选器仅在实时调试过程才适用。


      以下筛选值按内存类型指定内存区域。
      筛选器值显示的内存区域

      MEM_IMAGE

      映射到可执行映像的一部分的文件的内存。

      MEM_MAPPED

      映射到不是可执行映像的一部分的文件的内存。 这包括映射到分页文件的内存。

      MEM_PRIVATE

      专用内存。 此内存不共享任何其他进程和未映射到任何文件。


      下列筛选值根据内存的状态指定内存区域。
      筛选器值显示的内存区域

      MEM_COMMIT

      提交的内存。

      MEM_FREE

      可用内存。 这包括所有未保留的内存。

      MEM_RESERVE

      保留的内存。


      以下筛选值通过应用于内存的保护指定内存区域。
      筛选器值显示的内存区域

      PAGE_NOACCESS

      不能访问的内存。

      PAGE_READONLY

      是可读,但不可写且非可执行的内存。

      PAGE_READWRITE

      是可读和可写的但非可执行的内存。

      PAGE_WRITECOPY

      已写入时复制行为的内存。

      PAGE_EXECUTE

      是可执行文件,但不可读和不可写入的内存。

      PAGE_EXECUTE_READ

      是可执行文件和可读,但不可写的内存。

      PAGE_EXECUTE_READWRITE

      是可执行文件、 可读,并且必须可写内存。

      PAGE_EXECUTE_WRITECOPY

      它是可执行文件并具有写入时复制行为的内存。

      PAGE_GUARD

      充当一个保护页的内存。

      PAGE_NOCACHE

      未缓存的内存。

      PAGE_WRITECOMBINE

      已启用的写入-将访问的内存。

    • -o:{csv | tsv | 1}
      根据以下选项之一显示输出。
      Option输出格式

      csv

      以逗号分隔值的形式显示输出。

      tsv

      以制表符分隔值的形式显示输出。

      1

      裸机格式显示输出。 此格式的工作以及当!address用作输入 .foreach

    • -c:"Command"
      为每个内存区域执行自定义命令。您可以在命令中使用以下占位符来表示输出字段!address地址扩展命令。
      占位符输出字段

      %1

      基址

      %2

      结束地址 + 1

      %3

      区域大小

      %4

      在任务栏的搜索框中键入

      %5

      状态

      %6

      保护

      %7

      用法

      例如,!address -f:Heap -c:".echo %1 %3 %5"基址、 大小和类型的每个内存区域的状态将显示

      在命令中的引号必须加反斜杠 (")。 例如,! 地址-f: 堆-c:"s-a %1 %2 "pad""中搜索类型的每个内存区域"板"的字符串。

      不支持多个命令之间用分号分隔。
    • -?
      在调试器命令窗口中显示此扩展的最小帮助文本。

    DLL:

    Windows 2000

    Ext.dll

    Windows XP 及更高版本

    Ext.dll

     

    没有任何参数!address显示有关整个地址空间的信息。这个!address -summary命令只显示摘要。在内核模式下,此扩展只搜索内核内存,即使使用.process(设置进程上下文)指定给定进程的虚拟地址空间。在用户模式下!address总是指目标进程拥有的内存。 在用户模式下,!address显示指定地址所属区域的特征。没有参数,!address显示所有内存区域的特征。这些特性包括内存使用、内存类型、内存状态和内存保护。有关此信息含义的更多信息,请参阅-f参数说明中的前面的表。

    下面的示例使用!用于检索有关映射到kernel32.dll的内存区域的信息的地址。
    0:000> !address 75831234
    Usage:                  Image
    Base Address:           75831000
    End Address:            758f6000
    Region Size:            000c5000
    Type:                   01000000MEM_IMAGE
    State:                  00001000MEM_COMMIT
    Protect:                00000020PAGE_EXECUTE_READ
    More info:              lmv m kernel32
    More info:              !lmi kernel32
    More info:              ln 0x75831234
    

    此示例使用地址值0x75831234。显示屏显示此地址位于以地址0x75831000开头、以地址0x758F6000结尾的内存区域中。该区域有usage image、type mem_image、state mem_commit和protection page_execute_read。(有关这些值的详细信息,请参阅前面的表。)该显示还列出了三个其他调试器命令,您可以使用这些命令来获取有关此内存地址的更多信息。 如果您从一个地址开始并试图确定关于它的信息,那么使用信息通常是最有价值的。了解用法后,可以使用其他扩展来了解有关此内存的更多信息。例如,如果用途是heap,则可以使用!heap扩展命令以了解更多信息。

    下面的示例使用s(search memory)命令在类型为image的每个内存区域中搜索宽字符串“note”。
    !address /f:Image /c:"s -u %1 %2 "Note""
    
    *** Executing: s -u 0xab0000 0xab1000 "Note"
    *** Executing: s -u 0xab1000 0xabc000 "Note"
    00ab2936  004e 006f 0074 0065 0070 0061 0064 0000  N.o.t.e.p.a.d...
    00ab2f86  004e 006f 0074 0065 0070 0061 0064 005c  N.o.t.e.p.a.d..
    00ab32e4  004e 006f 0074 0065 0070 0061 0064 0000  N.o.t.e.p.a.d...
    *** Executing: s -u 0xabc000 0xabd000 "Note"
    . . .
    
    在内核模式下,输出!address与用户模式输出类似,但包含的信息较少。下面的示例显示内核模式输出。
    kd> !address
      804de000 - 00235000                           
     Usage       KernelSpaceUsageImage
              ImageName   ntoskrnl.exe
    
      80c00000 - 001e1000
              Usage       KernelSpaceUsagePFNDatabase
    
    ....
    
      f85b0000 - 00004000
              Usage       KernelSpaceUsageKernelStack
              KernelStack 817b4da0 : 324.368
    
     f880d000 - 073d3000
              Usage       KernelSpaceUsageNonPagedPoolExpansion
    
    “用法”的含义与用户模式相同。imagename“表示与此地址关联的模块。”kernelstack“显示这个线程的ethread块(0x817b4da0)、进程id(0x324)和线程id(0x368)的地址。
  • 相关阅读:
    windows系统发布Maven项目步骤
    如何取消复制文件里的svn关联
    转发:分享一个快的飞起的maven的settings.xml文件
    Maven的标准settings.xml文件
    Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference xxx 的问题分析与解决方案
    SpringBoot框架(由浅入深,深度解读)
    js实现“返回到上一页”
    导出Word文档
    好看的alert样式或者弹窗样式
    如何查看Oracle中的某表被锁定,以及如何解锁
  • 原文地址:https://www.cnblogs.com/yilang/p/11563411.html
Copyright © 2011-2022 走看看