问题标签 [pykd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
167 浏览

python - 如何使用 PYKD 读取堆

这个问题中,我想用DbgCommand("dt ...")API 调用替换,PYKD命令typedVar()来救援。

结果,我的 heap_stat 脚本(以m_nSizem_nCount信息扩展)现在运行速度快了三倍。

供您参考,我已完成此替换以计算 STL 集合中的成员数量:

由于这次成功,我想DbgCommand通过 API 调用替换其他请求。

对于 的情况dbgCommand('!heap -h 0'),这似乎不是那么简单(一些例子):

如何迭代我的进程堆(替换!heap -h 0)?

PS 即使targetHeap()不能代替!heap -h 0,我还是想知道如何使用它,用于调查目的。

0 投票
2 回答
155 浏览

directory - 如何获取在 Windbg 中打开的转储文件的路径?

我正在打开转储文件Windbg,并且正在编写一个PYKD相关的 Python 脚本来处理该转储文件。现在我想在该转储文件的目录中创建一个文件,该文件的名称应该基于我刚刚打开的转储文件。

为了做到这一点,我只需要知道我打开的转储文件的路径,但我没有找到基本Windbg命令,也没有PYKD得到它的命令。

如何获取在 Windbg 中打开的文件的路径?

0 投票
1 回答
142 浏览

python - 提高 PYKD heap_stat 性能,禁用 RtlValidSecurityDescriptor

在使用heap_stat(一个基于 PYKD 库的 Python 脚本,用于在 Windbg 环境中运行 Python 脚本)时,我对这个脚本完成其工作所需的大量时间感到沮丧。

所以,我已经开始了一个分析会话,使用“非常困”,这给出了以下结果:

如您所见,大部分时间都花在一个函数上,检查一些有效性(我认为不需要)。有没有办法禁用此检查(Windows 配置、注册表设置……)?

在第一次评论后编辑
由于xperf请求分析,我执行了以下xperf命令:

开始分析:

停止分析:

我已经使用 . 打开了结果(不完整,因为我首先想看看结果是什么样子)Windows Performance Analyzer,但这对我来说毫无意义。我相信我的xperf配置很糟糕。xperf为了能够测量哪个功能需要多少时间,我需要如何启动分析?

0 投票
3 回答
339 浏览

windbg - 如何摆脱符号文件相关的警告/错误消息

我正在使用 调试转储文件,Windbg并且经常收到警告/错误消息,如下所示:

为了避免这些,我已经尝试通过以下方式进行整个处理:

但是警告/错误消息不断出现。

第一次回复后编辑(在第二次编辑中确认)

我已经做了几次尝试,使用.outmask-6and .outmask-206,但都或多或少地失败了。这意味着什么:

我相信有些命令会禁用.outmask命令。你能确认一下吗,如果是的话,是否有类似的命令:

symsrv.ini文件而言:我的计算机上没有此文件,老实说,我不想搜索符号加载可能导致问题的每个模块。我宁愿只是避免提到的警告/错误消息。

在对该问题有更多了解后进行编辑

我还没有提到的一件事是PYKD用法:我正在研究 heap_stat,一个基于 PYKD 的脚本,用于执行内存分析,我相信这里的问题,正如您在以下摘录中看到的那样:

脚本源代码:

脚本输出:

在我看来,这意味着PYKD typeInfo()对象声明是唯一的,禁用.outmask() Windbg命令。

@PYKD 开发人员:您能确认一下吗?如果可以,请为此添加一个PYKD问题?(我在问题主页上没有看到任何.outmask相关问题)PYKD

0 投票
1 回答
69 浏览

c++ - 如何识别“错误”指针

我正在使用基于 PYKD 库的脚本 heap_stat(该脚本Ptrptr()!heap -h 0结果执行并从那里继续)。

这个 heap_stat 脚本有时包含错误的结果,你可以从下面的摘录中看到:

heap_stat 源代码:

结果摘录:

在 Visual Studio 中验证这一点会产生以下结果:

=> 正确

=> 错误:这似乎是一个不再有效的对象的剩余物。

我的问题:PYKD 中是否有任何功能可以过滤掉那些错误的对象?在 Visual Studio 中调试时,甚至有办法识别它们吗?不要忘记:那些剩菜是什么?我认为我的源代码中没有太多 CStringArray 的delete array_with_strings位置。array_with_strings

0 投票
2 回答
76 浏览

python - try..except 在交互式 Windbg Python 会话中让我退出 Python 会话

我正在使用 PYKD 进行转储分析。PYKD 库用于 heap_stat 脚本,我想以更具交互性的方式使用 PYKD 库,如下所示:

这很好用(我知道这没用,我只是想证明它有效)。

但是,heap_stat 脚本包含以下源代码:

当我以交互方式尝试时,这似乎不起作用:

这会产生以下错误,让我退出 Python 会话:

没关系:将这个函数调用包装在子句中是有原因的try..except,所以现在让我们尝试将这个函数包装try..except在交互式 Python 会话中的子句中:

=> 这给出了同样的错误,尽管try..except. 这很可能是由于缩进错误,但另一方面,交互式 Windbg Python 会话不允许多行,所以我不能使用 Python 缩进。

有没有办法try..except在 Windbg PYKD Python 会话中使用子句?
提前致谢

Ps 为了您的理解:这种行为(被踢出交互式会话)似乎是 Windbg PYKD 的典型行为,您可以在以下命令提示符 Python 会话中看到:

如您所见,抛出了异常,但我没有被踢出 Python 会话(观看>>>提示)。

0 投票
1 回答
195 浏览

python-2.7 - pykd:带有回调的 setBp 给出类型错误

我正在尝试使用 windbg 和 pykd 编写堆跟踪器,但是在尝试设置回调时出现 TypeError。

这是代码的一部分:

当我尝试运行它时,我收到以下错误:

我正在使用python 2.7版;

和 pykd 版本 2.0.0.22

我最初尝试遵循以下教程,但遇到了类似的错误,https://labs.f-secure.com/archive/heap-tracing-with-windbg-and-python/

任何帮助,将不胜感激。

问候,

0 投票
1 回答
50 浏览

python - 将地址转换为 PyKD 可以使用/等效于 WinDbg 的数字?命令

在 WinDbg 中,我有几个选项来定义一个数字

我正在寻找 PyKD 等价物来使用所有这些可能性作为我的脚本的输入。

那就是:我得到一个字符串,sys.argv[1]它可以是上述任何一种格式,我需要将它转换成 PyKD 可以理解的地址。

我试过了:

0 投票
1 回答
138 浏览

python - pykd 出现问题(pykd.DbgException:调用 IDebugClient::GetOutputCallbacks 失败 HRESULT 0x80010107)

我正在使用 pykd 并且能够将它与我的调试器 (windbg) 连接,但由于某种原因,我无法处理任何命令,pykd.dbgCommand不确定问题是什么,因为我尝试了多种方法来尝试解决问题:

  • 重新安装pydk + python
  • 在 python2.7、python3.5、python3.8 上试过
  • 尝试了不同的系统+不同的调试会话

当我尝试在windbg会话上运行命令时,它能够产生结果,但不知何故,它现在能够从python控制台做到这一点。

任何帮助,将不胜感激。

感谢大家提前回答。

0 投票
3 回答
73 浏览

windbg - 使用 PyKd 从故障转储文件中获取进程 ID

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

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

它为我提取进程 ID。

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

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

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

我试过了

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