!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參數說明中的前面的表。
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擴展命令以了解更多信息。
!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" . . .
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