使用 PyKd 从故障转储文件中获取进程 ID

Getting the process ID from a crash dump file with PyKd

我正在使用 Pykd 分析大量故障转储,我想从故障转储中获取进程 ID (PID)。

在 WinDbg 中,我会使用命令 | 并使用我的大脑来计算它。一段时间后,我想出了一个命令

.foreach /pS 3 /ps 999 ( pid {|}) {.echo ${pid}}

它为我提取进程 ID。

稍微聪明一点,我会改用伪寄存器:

.printf "%p", $tpid

我如何使用 PyKD 从用户模式故障转储文件 (.dmp) 获取进程 ID?

当然我总是可以做 pykd.dbgCommand(),但我想使用更强大的内置方式。

我试过了

伪注册者的想法还不错:

pykd.expr("$tpid")

以数字形式给出进程 ID。如果需要使用与 |.

相同的格式,请将其格式化为十六进制
0:000> dx Debugger.Sessions.First().Processes
Debugger.Sessions.First().Processes
    [0x294c]         : wait.exe
0:000> .shell -ci ".echo " type f:\src\wait\pid.py
from pykd import *
print(hex(expr("@$tpid"))).shell: Process exited
0:000> !py f:\src\wait\pid.py
0x294c
0:000> |
.  0    id: 294c        examine name: F:\src\wait\wait.exe
0:000>                                                        

尝试使用pykd.getProcessSystemID

https://githomelab.ru/pykd/pykd/-/wikis/API%20Reference#function-getprocesssystemid

如果您正在调试多个进程并需要切换它们的上下文(如 | 命令),getCurrentProcessId 就有意义