!for_each_process 命令详解
!for_each_process -?
用于显示帮助信息:
lkd> !for_each_process -?
Usage: !for_each_process [<command>]Runs <command> for each process in target. If no command
is given !process <process> 0 is run for each process.
@#Process in <command> string is replaced with process address.
(上文意思就是:针对目标中的每个进程运行 <command>
。如果未给出命令,则针对每个进程运行 !process <process> 0
。@#Process
在 <command>
字符串中将被替换为遍历的进程地址。)
不同于 !process 0 0
,使用快捷键 Ctrl+Break
无法中断该命令的输出(实际上它在循环执行多条命令,)。Ctrl+Break
类似于 Python 中的 continue
示例
比如《深入解析 Windows 操作系统》(第七版,第一卷)的第 107 页(3.5.7)的实验【识别安全进程】中就有这样的例子:
!for_each_process .if @@(((nt!_EPROCESS*)${@#Process})->Pcb.SecurePid) {.printf "Trustlet: %ma (%p)\n", @@(((nt!_EPROCESS*)${@#Process})->ImageFileName), @#Process}
该命令的输出类似下述格式:
Trustlet: Secure System (ffff9b09c4a51260)
......
(某些 Windows 系统版本可能并未启用(或者完全没有)VBS 功能,因此也就没有 Secure System 和 Trustlet,因此 _EPROCESS.Pcb
中就没有 SecurePid
这一项)