首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WinDbg会话中加载外部文件

如何在WinDbg会话中加载外部文件
EN

Stack Overflow用户
提问于 2022-08-31 07:30:32
回答 2查看 81关注 0票数 0

我正在尝试加载pykd.pyd,以便能够在Windbg崩溃转储分析期间使用Python。这是行不通的,正如您在这里所看到的:

代码语言:javascript
运行
复制
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文件是存在的。

如果我将文件名放在双引号之间,就会收到另一条错误消息,如您在这里看到的:

代码语言:javascript
运行
复制
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错误是不同的!)

有人知道什么会导致这个问题吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-01 05:58:18

不要直接加载python包(C:\python 27\Lib\site-packages\pykd.pyd )。这是一种不受支持的遗产。

您需要用于windbg:https://githomelab.ru/pykd/pykd-ext的特殊python引导程序。

票数 1
EN

Stack Overflow用户

发布于 2022-08-31 20:20:32

错误码

错误消息对应于错误代码。您可以使用!error命令进行检查:

代码语言:javascript
运行
复制
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已经告诉我们了。

引号

既然您已经在调试,那么让我们也调试一下这个问题。只需知道正确的工具,即过程监视器

设置如下过滤器:

  1. “进程名称”、“包含”、"windbg.exe",然后“包括”
  2. “进程名称”、“包含”、"EngHost.exe",然后“包括”

现在运行命令

代码语言:javascript
运行
复制
0:000> .load "c:\hello"

你会发现引号会把一切都搞砸:

现在试一试

代码语言:javascript
运行
复制
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:

  1. Python将尝试查找PyKd系统安装(相对于虚拟环境或venv)。
  2. 系统安装必须在%PATH%中
  3. 虽然您可以在%PATH%变量中安装32位和64位Python,但是它会首先找到其中的一个。可能是正确的,也可能不是。

结论:只在%PATH%中安装一个Python,并使用正确的bitness。目前我只知道这个解决方案。也许PyKD团队也发布了一个答案,并解释了如何在不随时修改%PATH%的情况下完成这个任务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73552325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档