!for_each_module
A extensão !for_each_module executa um comando do depurador uma vez para cada módulo carregado.
!for_each_module ["CommandString"]
!for_each_module -?
<Parâmetros
Sequência de comandos
Especifica os comandos do depurador a serem executados uma vez para cada módulo na lista de módulos do depurador. Se CommandString incluir vários comandos, você deverá separá-los com ponto-e-vírgula e colocar CommandString entre aspas. Se você incluir vários comandos, os comandos individuais dentro de CommandString não poderão conter aspas.
Você pode usar os aliases a seguir em CommandString ou em qualquer script em que os comandos em CommandString são executados.
Alias | Data type | Valor |
---|---|---|
@#FileVersion |
string |
A versão de arquivo do módulo. |
@#ProductVersion |
string |
A versão de produto do módulo. |
@#ModuleIndex |
ULONG |
O número do módulo. Os módulos são enumerados consecutivamente, começando com zero. |
@#ModuleName |
string |
O nome do módulo. Esse nome normalmente é o nome do arquivo sem a extensão de nome de arquivo. Em algumas situações, o nome do módulo difere significativamente do nome do arquivo. |
@#ImageName |
string |
O nome do arquivo executável, incluindo a extensão do nome do arquivo. Normalmente, o caminho completo é incluído no modo de usuário, mas não no modo kernel. |
@#LoadedImageName |
string |
A menos que os símbolos do Microsoft CodeView estejam presentes, esse alias é o mesmo que o nome da imagem. |
@#MappedImageName |
string |
Na maioria das situações, esse alias é NULL. Se o depurador estiver mapeando um arquivo de imagem (por exemplo, durante a depuração do minidespejo), esse alias será o nome da imagem mapeada. |
@#SymbolFileName |
string |
O caminho e o nome do arquivo de símbolo. Se você não tiver carregado um símbolo, esse alias será o nome do arquivo executável. |
@#ModuleNameSize |
ULONG |
O comprimento da cadeia de caracteres do nome do módulo, mais um. |
@#ImageNameSize |
ULONG |
O comprimento da cadeia de caracteres do nome da imagem, mais um. |
@#LoadedImageNameSize |
ULONG |
O comprimento da cadeia de caracteres do nome da imagem carregada, mais um. |
@#MappedImageNameSize |
ULONG |
O comprimento da cadeia de caracteres do nome da imagem mapeada, mais um. |
@#SymbolFileNameSize |
ULONG |
O comprimento da cadeia de caracteres do nome do arquivo de símbolo, mais um. |
@#Base |
ULONG64 |
O endereço do início da imagem. |
@#Size |
ULONG |
O tamanho da imagem, em bytes. |
@#End |
ULONG64 |
O endereço do fim da imagem. |
@#TimeDateStamp |
ULONG |
O carimbo de hora e data da imagem. Se você quiser expandir esse carimbo de data e hora em uma data legível, use o comando .formats (Mostrar Formatos de Número). |
@#Checksum |
ULONG |
A soma de verificação do módulo. |
@#Flags |
ULONG |
Os sinalizadores do módulo. Para obter uma lista dos valores de DEBUG_MODULE_Xxx, consulte Dbgeng.h. |
@#SymbolType |
USHORT |
O tipo de símbolo. Para obter uma lista dos valores de DEBUG_SYMTYPE_Xxx, consulte Dbgeng.h. |
Esses aliases são todos substituídos antes que CommandString seja executado para cada módulo e antes que qualquer outra análise ocorra. Esses aliases diferenciam maiúsculas de minúsculas. Você deve adicionar um espaço antes do alias e um espaço depois dele, mesmo que o alias esteja entre parênteses. Se usar a sintaxe de expressão C++, você deverá fazer referência a esses aliases como @@( @#alias).
Esses aliases estarão disponíveis apenas durante o tempo de vida da chamada para !for_each_module. Não os confunda com pseudo-registros, aliases de nome fixo ou aliases de nome de usuário.
-?
Exibe um texto de Ajuda dessa extensão na janela Comando do Depurador.
DLL
Ext.dll
Informações Adicionais
Para obter mais informações sobre como definir e usar aliases como atalhos para inserir cadeias de caracteres (incluindo o uso do token ${ }), confira Usando aliases.
Comentários
Se você não especificar um argumento, a extensão !for_each_module exibirá informações gerais sobre os módulos carregados. Essas informações são semelhantes às informações que o comando a seguir mostra.
!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName @#LoadedImageName
Para obter mais informações sobre módulos carregados e descarregados, use o comando lm (Listar Módulos Carregados).
Se você habilitar a saída detalhada do depurador, o depurador exibirá o número total de módulos carregados e descarregados quando a extensão for chamada, bem como informações detalhadas sobre cada módulo (incluindo os valores de cada alias disponível) antes que CommandString seja executado para esse módulo.
Os exemplos a seguir mostram como usar a extensão !for_each_module. Os comandos a seguir exibem os sinalizadores de depuração globais.
!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*
O comando a seguir verifica se há corrupção binária em cada módulo carregado usando a extensão !chkimg:
!for_each_module !chkimg @#ModuleName
O comando a seguir procura o padrão "MZ" em cada imagem carregada.
!for_each_module s-a @#Base @#End "MZ"
O exemplo a seguir demonstra o uso de @#FileVersion e @#ProductVersion para cada nome de módulo:
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