Bagikan melalui


!Alamat

Ekstensi !address menampilkan informasi tentang memori yang digunakan proses target atau komputer target.

Mode Pengguna

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

Mode Kernel

!address Address 
!address

Parameter

Alamat
Hanya menampilkan wilayah ruang alamat yang berisi Alamat.

-Ringkasan
Hanya menampilkan informasi ringkasan.

-f:F1, F2, ...
Hanya menampilkan wilayah yang ditentukan oleh filter F1, F2, dan sebagainya.

Nilai filter berikut menentukan wilayah memori dengan cara proses target menggunakannya.

Nilai filter Wilayah memori ditampilkan

VAR

Wilayah sibuk. Wilayah ini mencakup semua blok alokasi virtual, tumpukan SBH, memori dari alokator kustom, dan semua wilayah lain dari ruang alamat yang tidak termasuk dalam klasifikasi lain.

Gratis

Memori bebas. Ini termasuk semua memori yang belum dicadangkan.

Gambar

Memori yang dipetakan ke file yang merupakan bagian dari gambar yang dapat dieksekusi.

Tumpukan

Memori yang digunakan untuk tumpukan utas.

Teb

Memori yang digunakan untuk blok lingkungan utas (TEB).

Peb

Memori yang digunakan untuk blok lingkungan proses (PEB).

Heap

Memori yang digunakan untuk timbunan.

PageHeap

Wilayah memori yang digunakan untuk timbunan halaman penuh.

CSR

Memori bersama CSR.

Actx

Memori yang digunakan untuk data konteks aktivasi.

NLS

Memori yang digunakan untuk tabel Dukungan Bahasa Nasional (NLS).

FileMap

Memori yang digunakan untuk file yang dipetakan memori. Filter ini hanya berlaku selama penelusuran kesalahan langsung.

Nilai filter berikut menentukan wilayah memori menurut jenis memori.

Nilai filter Wilayah memori ditampilkan

MEM_IMAGE

Memori yang dipetakan ke file yang merupakan bagian dari gambar yang dapat dieksekusi.

MEM_MAPPED

Memori yang dipetakan ke file yang bukan bagian dari gambar yang dapat dieksekusi. Ini termasuk memori yang dipetakan ke file halaman.

MEM_PRIVATE

Memori privat. Memori ini tidak dibagikan oleh proses lain, dan tidak dipetakan ke file apa pun.

Nilai filter berikut menentukan wilayah memori berdasarkan status memori.

Nilai filter Wilayah memori ditampilkan

MEM_COMMIT

Memori yang diterapkan.

MEM_FREE

Memori bebas. Ini termasuk semua memori yang belum dicadangkan.

MEM_RESERVE

Memori yang dipesan.

Nilai filter berikut menentukan wilayah memori oleh perlindungan yang diterapkan ke memori.

Nilai filter Wilayah memori ditampilkan

PAGE_NOACCESS

Memori yang tidak dapat diakses.

PAGE_READONLY

Memori yang dapat dibaca, tetapi tidak dapat ditulis dan tidak dapat dieksekusi.

PAGE_READWRITE

Memori yang dapat dibaca dan dapat ditulis, tetapi tidak dapat dieksekusi.

PAGE_WRITECOPY

Memori yang memiliki perilaku copy-on-write.

PAGE_EXECUTE

Memori yang dapat dieksekusi, tetapi tidak dapat dibaca dan tidak dapat ditulis.

PAGE_EXECUTE_READ

Memori yang dapat dieksekusi dan dapat dibaca, tetapi tidak dapat ditulis.

PAGE_EXECUTE_READWRITE

Memori yang dapat dieksekusi, dapat dibaca, dan dapat ditulis.

PAGE_EXECUTE_WRITECOPY

Memori yang dapat dieksekusi dan memiliki perilaku copy-on-write.

PAGE_GUARD

Memori yang bertindak sebagai halaman penjaga.

PAGE_NOCACHE

Memori yang tidak di-cache.

PAGE_WRITECOMBINE

Memori yang mengaktifkan akses write-combine.

-o:{csv | tsv | 1}
Menampilkan output sesuai dengan salah satu opsi berikut.

Opsi Format output

CSV

Menampilkan output sebagai nilai yang dipisahkan koma.

Tsv

Menampilkan output sebagai nilai yang dipisahkan tab.

1

Menampilkan output dalam format kosong. Format ini berfungsi dengan baik ketika !address digunakan sebagai input ke .foreach.

-c:"Command"
Menjalankan perintah kustom untuk setiap wilayah memori. Anda dapat menggunakan tempat penampung berikut dalam perintah Anda untuk mewakili bidang output ekstensi !address .

Placeholder Bidang output

%1

Alamat dasar

%2

Alamat akhir + 1

%3

Ukuran wilayah

4%

Jenis

5%

Status

6%

Proteksi

7%

Penggunaan

Misalnya, !address -f:Heap -c:".echo %1 %3 %5" menampilkan alamat dasar, ukuran, dan status untuk setiap wilayah memori jenis Heap.

Tanda kutip dalam perintah harus didahului dengan garis miring terbalik (\"). Misalnya, !address -f:Heap -c:"s -a %1 %2 \"pad\"" mencari setiap wilayah memori jenis Heap untuk string "pad".

Beberapa perintah yang dipisahkan oleh titik koma tidak didukung.

-?
Menampilkan teks Bantuan minimal untuk ekstensi ini di jendela Perintah Debugger.

DLL

Ext.dll

Informasi Tambahan

Untuk informasi selengkapnya tentang cara menampilkan dan mencari memori, lihat Membaca dan Menulis Memori. Untuk ekstensi tambahan yang menampilkan properti memori, lihat !vm (mode kernel) dan !vprot (mode pengguna).

Keterangan

Tanpa parameter apa pun, ekstensi !address menampilkan informasi tentang seluruh ruang alamat. Perintah !address -summary hanya memperlihatkan ringkasan.

Dalam mode kernel, ekstensi ini hanya mencari memori kernel, bahkan jika Anda menggunakan .process (Atur Konteks Proses) untuk menentukan ruang alamat virtual proses tertentu. Dalam mode pengguna, ekstensi !address selalu mengacu pada memori yang dimiliki proses target.

Dalam mode pengguna, Alamat !addressmenunjukkan karakteristik wilayah tempat alamat yang ditentukan berada. Tanpa parameter, !address menunjukkan karakteristik semua wilayah memori. Karakteristik ini termasuk penggunaan memori, jenis memori, status memori, dan perlindungan memori. Untuk informasi selengkapnya tentang arti informasi ini, lihat tabel sebelumnya dalam deskripsi parameter -f .

Contoh berikut menggunakan !address untuk mengambil informasi tentang wilayah memori yang dipetakan ke 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

Contoh ini menggunakan nilai Alamat 0x75831234. Tampilan menunjukkan bahwa alamat ini berada di wilayah memori yang dimulai dengan alamat 0x75831000 dan diakhapi dengan alamat 0x758f6000. Wilayah ini memiliki gambar penggunaan, jenis MEM_IMAGE, MEM_COMMIT status, dan PAGE_EXECUTE_READ perlindungan. (Untuk informasi selengkapnya tentang arti nilai-nilai ini, lihat tabel sebelumnya.) Tampilan ini juga mencantumkan tiga perintah debugger lain yang dapat Anda gunakan untuk mendapatkan informasi selengkapnya tentang alamat memori ini.

Jika Anda memulai dengan alamat dan mencoba menentukan informasi tentang hal itu, informasi penggunaan sering kali merupakan yang paling berharga. Setelah Mengetahui penggunaannya, Anda dapat menggunakan ekstensi tambahan untuk mempelajari selengkapnya tentang memori ini. Misalnya, jika penggunaannya adalah Heap, Anda dapat menggunakan ekstensi !heap untuk mempelajari lebih lanjut.

Contoh berikut menggunakan perintah s (Search Memory) untuk mencari setiap wilayah memori jenis Gambar untuk string karakter lebar "Catatan".

!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"
. . .

Dalam mode kernel, output ! address mirip dengan output mode pengguna tetapi berisi lebih sedikit informasi. Contoh berikut menunjukkan output mode kernel.

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

Arti "penggunaan" sama seperti dalam mode pengguna. "ImageName" menunjukkan modul yang terkait dengan alamat ini. "KernelStack" menunjukkan alamat blok ETHREAD utas ini (0x817B4DA0), ID proses (0x324), dan ID utas (0x368).