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)的地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM