Bagikan melalui


!for_each_module

Ekstensi !for_each_module menjalankan perintah debugger satu kali untuk setiap modul yang dimuat.

!for_each_module ["CommandString"]
!for_each_module -?

<Parameter

CommandString
Menentukan perintah debugger untuk dijalankan satu kali untuk setiap modul dalam daftar modul debugger. Jika CommandString menyertakan beberapa perintah, Anda harus memisahkannya dengan titik koma dan mengapit CommandString dalam tanda kutip. Jika Anda menyertakan beberapa perintah, perintah individual dalam CommandString tidak boleh berisi tanda kutip.

Anda dapat menggunakan alias berikut di CommandString atau dalam skrip apa pun yang dijalankan perintah di CommandString .

Alias Jenis Data Nilai

@#FileVersion

string

Versi file modul.

@#ProductVersion

string

Versi produk modul.

@#ModuleIndex

ULONG

Nomor modul. Modul dijumlahkan secara berturut-turut, dimulai dengan nol.

@#ModuleName

string

Nama modul. Nama ini biasanya merupakan nama file tanpa ekstensi nama file. Dalam beberapa situasi, nama modul berbeda secara signifikan dari nama file.

@#ImageName

string

Nama file yang dapat dieksekusi, termasuk ekstensi nama file. Biasanya, jalur lengkap disertakan dalam mode pengguna tetapi tidak dalam mode kernel.

@#LoadedImageName

string

Kecuali simbol Microsoft CodeView ada, alias ini sama dengan nama gambar.

@#MappedImageName

string

Dalam kebanyakan situasi, alias ini adalah NULL. Jika debugger memetakan file gambar (misalnya, selama debugging minidump), alias ini adalah nama gambar yang dipetakan.

@#SymbolFileName

string

Jalur dan nama file simbol. Jika Anda belum memuat simbol apa pun, alias ini adalah nama file yang dapat dieksekusi sebagai gantinya.

@#ModuleNameSize

ULONG

Panjang string string nama modul, ditambah satu.

@#ImageNameSize

ULONG

Panjang string string nama gambar, ditambah satu.

@#LoadedImageNameSize

ULONG

Panjang string dari string nama gambar yang dimuat, ditambah satu.

@#MappedImageNameSize

ULONG

Panjang string string nama gambar yang dipetakan, ditambah satu.

@#SymbolFileNameSize

ULONG

Panjang string string nama file simbol, ditambah satu.

@#Base

ULONG64

Alamat awal gambar.

@#Size

ULONG

Ukuran gambar, dalam byte.

@#End

ULONG64

Alamat akhir gambar.

@#TimeDateStamp

ULONG

Stempel waktu dan tanggal gambar. Jika Anda ingin memperluas tanda waktu dan tanggal ini ke dalam tanggal yang dapat dibaca, gunakan perintah .formats (Show Number Formats ).

@#Checksum

ULONG

Checksum modul.

@#Flags

ULONG

Bendera modul. Untuk daftar nilai DEBUG_MODULE_Xxx , lihat Dbgeng.h.

@#SymbolType

USHORT

Jenis simbol. Untuk daftar nilai DEBUG_SYMTYPE_Xxx , lihat Dbgeng.h.

Alias ini semua diganti sebelum CommandString dijalankan untuk setiap modul dan sebelum penguraian lainnya terjadi. Alias ini peka huruf besar/kecil. Anda harus menambahkan spasi sebelum alias dan spasi setelahnya, bahkan jika alias diapit dalam tanda kurung. Jika Anda menggunakan sintaks ekspresi C++, Anda harus mereferensikan alias ini sebagai @@( @#alias).

Alias ini hanya tersedia selama masa pakai panggilan ke !for_each_module. Jangan bingung dengan pseudo-registers, alias nama tetap, atau alias bernama pengguna.

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

DLL

Ext.dll

Informasi Tambahan

Untuk informasi selengkapnya tentang cara menentukan dan menggunakan alias sebagai pintasan untuk memasukkan string karakter (termasuk penggunaan token ${ }), lihat Menggunakan Alias.

Keterangan

Jika Anda tidak menentukan argumen apa pun, ekstensi !for_each_module menampilkan informasi umum tentang modul yang dimuat. Informasi ini mirip dengan informasi yang diperlihatkan perintah berikut.

!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName  @#LoadedImageName

Untuk informasi selengkapnya tentang modul yang dimuat dan dibongkar, gunakan perintah lm (Modul Yang Dimuat Daftar).

Jika Anda mengaktifkan output debugger verbose, debugger menampilkan jumlah total modul yang dimuat dan dibongkar saat ekstensi dipanggil, dan debugger menampilkan informasi terperinci tentang setiap modul (termasuk nilai setiap alias yang tersedia) sebelum CommandString dijalankan untuk modul tersebut.

Contoh berikut menunjukkan cara menggunakan ekstensi !for_each_module . Perintah berikut menampilkan bendera debug global.

!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*

Perintah berikut memeriksa kerusakan biner di setiap modul yang dimuat, dengan menggunakan ekstensi !chkimg:

!for_each_module !chkimg @#ModuleName

Perintah berikut mencari pola "MZ" di setiap gambar yang dimuat.

!for_each_module s-a @#Base @#End "MZ"

Contoh berikut menunjukkan penggunaan @#FileVersion dan @#ProductVersion untuk setiap nama modul:

0:000> !for_each_module .echo @#ModuleName fver = @#FileVersion pver = @#ProductVersion 
USER32 fver = 6.0.6000.16438 (vista_gdr.070214-1610) pver = 6.0.6000.16438
kernel32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
ntdll fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
notepad fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
WINSPOOL fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
COMCTL32 fver = 6.10 (vista_rtm.061101-2205) pver = 6.0.6000.16386
SHLWAPI fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
msvcrt fver = 7.0.6000.16386 (vista_rtm.061101-2205) pver = 7.0.6000.16386
GDI32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
RPCRT4 fver = 6.0.6000.16525 (vista_gdr.070716-1600) pver = 6.0.6000.16525
SHELL32 fver = 6.0.6000.16513 (vista_gdr.070626-1505) pver = 6.0.6000.16513
ole32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
ADVAPI32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
COMDLG32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386