!for_each_module
L'estensione !for_each_module esegue un comando debugger una volta per ogni modulo caricato.
!for_each_module ["CommandString"]
!for_each_module -?
<Parametri
CommandString
Specifica i comandi del debugger da eseguire una sola volta per ogni modulo nell'elenco dei moduli del debugger. Se CommandString include più comandi, è necessario separarli con punti e virgola e racchiudere CommandString tra virgolette. Se si includono più comandi, i singoli comandi all'interno di CommandString non possono contenere virgolette.
È possibile usare gli alias seguenti in CommandString o in qualsiasi script eseguito dai comandi in CommandString .
Alias | Tipo di dati | Valore |
---|---|---|
@#FileVersion |
string |
Versione del file del modulo. |
@#ProductVersion |
string |
Versione del prodotto del modulo. |
@#ModuleIndex |
ULONG |
Numero del modulo. I moduli vengono enumerati consecutivamente, a partire da zero. |
@#ModuleName |
string |
Nome del modulo. Questo nome è in genere il nome del file senza l'estensione del nome file. In alcune situazioni, il nome del modulo differisce in modo significativo dal nome del file. |
@#ImageName |
string |
Nome del file eseguibile, inclusa l'estensione del nome file. In genere, il percorso completo è incluso in modalità utente, ma non in modalità kernel. |
@#LoadedImageName |
string |
A meno che non siano presenti simboli di Microsoft CodeView, questo alias corrisponde al nome dell'immagine. |
@#MappedImageName |
string |
Nella maggior parte dei casi, questo alias è NULL. Se il debugger esegue il mapping di un file di immagine,ad esempio durante il debug di minidump, questo alias è il nome dell'immagine mappata. |
@#SymbolFileName |
string |
Percorso e nome del file di simboli. Se non sono stati caricati simboli, questo alias è invece il nome del file eseguibile. |
@#ModuleNameSize |
ULONG |
Lunghezza della stringa del nome del modulo, più una. |
@#ImageNameSize |
ULONG |
Lunghezza della stringa del nome dell'immagine, più una. |
@#LoadedImageNameSize |
ULONG |
Lunghezza della stringa del nome dell'immagine caricata, più una. |
@#MappedImageNameSize |
ULONG |
Lunghezza della stringa del nome dell'immagine mappata, più una. |
@#SymbolFileNameSize |
ULONG |
Lunghezza della stringa del nome del file di simboli, più una. |
@#Base |
ULONG64 |
Indirizzo dell'inizio dell'immagine. |
@#Size |
ULONG |
Dimensioni dell'immagine, in byte. |
@#End |
ULONG64 |
Indirizzo della fine dell'immagine. |
@#TimeDateStamp |
ULONG |
Indicatore di data e ora dell'immagine. Se si desidera espandere questo indicatore di data e ora in una data leggibile, usare il comando .formats (Show Number Formats). |
@#Checksum |
ULONG |
Checksum del modulo. |
@#Flags |
ULONG |
Flag del modulo. Per un elenco dei valori DEBUG_MODULE_Xxx , vedere Dbgeng.h. |
@#SymbolType |
USHORT |
Tipo di simbolo. Per un elenco dei valori DEBUG_SYMTYPE_Xxx , vedere Dbgeng.h. |
Questi alias vengono tutti sostituiti prima dell'esecuzione di CommandString per ogni modulo e prima che si verifichi un'altra analisi. Questi alias fanno distinzione tra maiuscole e minuscole. È necessario aggiungere uno spazio prima dell'alias e uno spazio dopo di esso, anche se l'alias è racchiuso tra parentesi. Se si usa la sintassi delle espressioni C++, è necessario fare riferimento a questi alias come @@( @#alias).
Questi alias sono disponibili solo durante la durata della chiamata a !for_each_module. Non confonderli con pseudoregistri, alias a nome fisso o alias denominati dall'utente.
-?
Visualizza il testo della Guida per questa estensione nella finestra Del comando del debugger.
DLL
Ext.dll
Informazioni aggiuntive
Per altre informazioni su come definire e usare alias come tasti di scelta rapida per l'immissione di stringhe di caratteri (incluso l'uso del token ${ } ), vedere Uso degli alias.
Osservazioni:
Se non si specificano argomenti, l'estensione !for_each_module visualizza informazioni generali sui moduli caricati. Queste informazioni sono simili alle informazioni mostrate dal comando seguente.
!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName @#LoadedImageName
Per altre informazioni sui moduli caricati e scaricati, usare il comando lm (Elenca moduli caricati).
Se si abilita l'output dettagliato del debugger, il debugger visualizza il numero totale di moduli caricati e scaricati quando viene chiamata l'estensione e il debugger visualizza informazioni dettagliate su ogni modulo (inclusi i valori di ogni alias disponibile) prima dell'esecuzione di CommandString per tale modulo.
Negli esempi seguenti viene illustrato come usare l'estensione !for_each_module . I comandi seguenti visualizzano i flag di debug globali.
!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*
Il comando seguente verifica la presenza di danneggiamento binario in ogni modulo caricato usando l'estensione !chkimg :
!for_each_module !chkimg @#ModuleName
Il comando seguente cerca il modello "MZ" in ogni immagine caricata.
!for_each_module s-a @#Base @#End "MZ"
Nell'esempio seguente viene illustrato l'uso di @#FileVersion e @#ProductVersion per ogni nome di modulo:
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