0

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

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

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

它为我提取进程 ID。

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

.printf "%p", $tpid

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

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

我试过了

  • pykd.getCurrentProcessId()但它返回 0。
  • pykd.reg("tpid")但它说“无效的注册名称”
4

3 回答 3

0

伪注册者的想法还不错:

pykd.expr("$tpid")

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

于 2021-12-14T12:42:43.620 回答
0
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>                                                        
于 2021-12-14T17:28:07.703 回答
0

尝试使用 pykd.getProcessSystemID

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

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

于 2021-12-20T11:06:29.750 回答