!for_each_function 扩展为指定模块中名称与指定模式匹配的每个函数执行调试器命令。
!for_each_function -m:ModuleName -p:Pattern -c:CommandString
!for_each_function -?
参数
-m:ModuleName
指定模块名称。 此名称通常是不带文件扩展名的文件名。 在一些情况下,模块名称与文件名明显不同。
-p:Pattern
指定要匹配的模式。
-c:CommandString
指定要为与模式匹配的指定模块中的每个函数执行的调试器命令。
可以在 CommandString 中使用以下别名。
| 别名 | 数据类型 | 值 |
|---|---|---|
@#SymbolName |
string |
符号名称。 |
@#SymbolAddress |
ULONG64 |
符号地址。 |
@#ModName |
string |
模块名。 |
@#FunctionName |
string |
函数名称。 |
-?
显示此扩展的帮助。
DLL
Ext.dll
注解
以下示例演示如何列出与模式 *read* 匹配的 PCI 模块中的所有函数名称。
1: kd> !for_each_function -m:pci -p:*read* -c:.echo @#FunctionName
PciReadDeviceConfig
PciReadDeviceSpace
PciReadSlotIdData
PciExternalReadDeviceConfig
PiRegStateReadStackCreationSettingsFromKey
VmProxyReadDevicePathsFromRegistry
PpRegStateReadCreateClassCreationSettings
ExpressRootPortReadConfigSpace
PciReadRomImage
PciDevice_ReadConfig
PciReadDeviceConfigEx
PciReadSlotConfig
如果别名前没有空格,则必须将别名放置在 ${} 别名解释器令牌中。
以下示例演示了如何列出所有模块中函数名称与模式 *CreateFile* 匹配的所有符号。 别名 @#ModuleName 前面没有空格。 因此,它放入 ${}别名解释器令牌中。
请注意 不要将 @#ModuleName 别名与 @#ModName 别名混淆。 @#ModuleName 别名属于 !for_each_module 扩展,@#ModName 别名属于 !for_each_function 扩展。
1: kd> !for_each_module !for_each_function -m:${@#ModuleName} -p:*CreateFile* -c:.echo @#SymbolName
nt!BiCreateFileDeviceElement
nt!NtCreateFile
...
Wdf01000!FxFileObject::_CreateFileObject
fltmgr!FltCreateFileEx2$fin$0
fltmgr!FltCreateFileEx2
...
Ntfs!TxfIoCreateFile
Ntfs!NtfsCreateFileLock
...
MpFilter!MpTxfpCreateFileEntryUnsafe
mrxsmb10!MRxSmbFinishLongNameCreateFile
...
srv!SrvIoCreateFile
可以在命令文件中放置一系列命令,并使用 $$><(运行脚本文件)为与模式匹配的每个函数执行这些命令。 假设名为 Commands.txt 的文件包含以下命令:
.echo
.echo @#FunctionName
u @#SymbolAddress L1
在下面的示例中,为 PCI 模块中与模式 *read* 匹配的每个函数执行 Commands.text 文件中的命令。
1: kd> !for_each_function -m:pci -p:*read* -c:$$><Commands.txt
PciReadDeviceConfig
pci!PciReadDeviceConfig [d:\wmm1\drivers\busdrv\pci\config.c @ 349]:
fffff880`00f7b798 48895c2408 mov qword ptr [rsp+8],rbx
PciReadDeviceSpace
pci!PciReadDeviceSpace [d:\wmm1\drivers\busdrv\pci\config.c @ 1621]:
fffff880`00f7c044 48895c2408 mov qword ptr [rsp+8],rbx
...