我正在尝试加载pykd.pyd,以便能够在Windbg崩溃转储分析期间使用Python。这是行不通的,正如您在这里所看到的:
0:006> .load C:\Python27\Lib\site-packages\pykd.pyd
The call to LoadLibrary(C:\Python27\Lib\site-packages\pykd.pyd) failed,
Win32 error 0n126
"The specified module could not be found."
Please check your debugger configuration and/or network access.
关于您的信息,我已经开始打开Windbg (版本x86)并打开一个崩溃转储文件,并且我可以确认上面提到的pykd.pyd
文件是存在的。
如果我将文件名放在双引号之间,就会收到另一条错误消息,如您在这里看到的:
0:006> .load "C:\Python27\Lib\site-packages\pykd.pyd"
The call to LoadLibrary(C:Python27Libsite-packagespykd.pyd) failed,
Win32 error 0n2
"The system cannot find the file specified."
Please check your debugger configuration and/or network access.
(需要注意的是,这两种Win32错误是不同的!)
有人知道什么会导致这个问题吗?
提前感谢
发布于 2022-09-01 05:58:18
不要直接加载python包(C:\python 27\Lib\site-packages\pykd.pyd )。这是一种不受支持的遗产。
您需要用于windbg:https://githomelab.ru/pykd/pykd-ext的特殊python引导程序。
发布于 2022-08-31 20:20:32
错误码
错误消息对应于错误代码。您可以使用!error
命令进行检查:
0:000> !error 0n2
Error code: (Win32) 0x2 (2) - The system cannot find the file specified.
0:000> !error 0n126
Error code: (Win32) 0x7e (126) - The specified module could not be found.
这里没什么新鲜事。WinDbg已经告诉我们了。
引号
既然您已经在调试,那么让我们也调试一下这个问题。只需知道正确的工具,即过程监视器。
设置如下过滤器:
现在运行命令
0:000> .load "c:\hello"
你会发现引号会把一切都搞砸:
现在试一试
0:000> .load c:\hello
你会发现它在正确的地方搜索:
结论:.load
为无引号的。
加载PyKD
您可能知道有32位和64位。您不能在64位进程中加载32位DLL,在32位进程中不能加载64位DLL。
调试扩展也是如此:如果使用64位WinDbg,则需要64位扩展。如果使用32位WinDbg,则需要32位扩展。
因此,首先,检查您的PyKD DLL (或者这里的.pyd
,实际上是.dll
,只需重命名它)是否有正确的bitness (如果我正确地读取了32位)。
现在,32位PyKD DLL需要安装32位的Python才能正确运行。同样,64位PyKD需要安装64位的Python。
同样,您可以帮助自己使用正确的调试工具。Process清楚地显示pykd.pyd
已成功加载,但依赖项python38.dll
(在我的例子中,可能是Python2.7)不是:
对于以下情况,我不是百分之百肯定,但IMHO:
结论:只在%PATH%中安装一个Python,并使用正确的bitness。目前我只知道这个解决方案。也许PyKD团队也发布了一个答案,并解释了如何在不随时修改%PATH%的情况下完成这个任务。
https://stackoverflow.com/questions/73552325
复制相似问题