我正在使用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"),但上面写着“无效注册名”发布于 2021-12-14 17:28:07
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-14 12:42:43
假雷鬼的想法并没有那么糟糕:
pykd.expr("$tpid")将进程ID作为数字提供。如果需要与|相同的格式,则将其格式化为十六进制。
发布于 2021-12-20 11:06:29
尝试使用pykd.getProcessSystemID
https://githomelab.ru/pykd/pykd/-/wikis/API%20Reference#function-getprocesssystemid
如果您正在调试多个进程,并且需要切换它们的上下文,getCurrentProcessId是有意义的(例如,AC.26命令)。
https://stackoverflow.com/questions/70348779
复制相似问题