使用 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.getCurrentProcessId()
但它 returns 0.
pykd.reg("tpid")
但它显示“无效的注册名称”
伪注册者的想法还不错:
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 就有意义
我正在使用 Pykd 分析大量故障转储,我想从故障转储中获取进程 ID (PID)。
在 WinDbg 中,我会使用命令 |
并使用我的大脑来计算它。一段时间后,我想出了一个命令
.foreach /pS 3 /ps 999 ( pid {|}) {.echo ${pid}}
它为我提取进程 ID。
稍微聪明一点,我会改用伪寄存器:
.printf "%p", $tpid
我如何使用 PyKD 从用户模式故障转储文件 (.dmp) 获取进程 ID?
当然我总是可以做 pykd.dbgCommand()
,但我想使用更强大的内置方式。
我试过了
pykd.getCurrentProcessId()
但它 returns 0.pykd.reg("tpid")
但它显示“无效的注册名称”
伪注册者的想法还不错:
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 就有意义