通过


!for_each_function

!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

...

另请参阅

!for_each_module