问题标签 [windbg]

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 回答
2393 浏览

.net - .Net 内存转储:!eeheap -gc:GC 生成在哪里开始和结束?

我想我在这里遗漏了一些基础知识,所以希望这篇文章可以澄清这一点。

我已经转储并正在查看托管堆,并且有兴趣专门查看每个堆中的对象。这是调试器的输出:

我希望我可以获取 GC 代的起始地址,然后查看从该地址开始一直到下一代的段。我相信堆是压缩的,因此希望在第一段找到第 2 代,这看起来是这样的:

但是,我无法确定这在哪里结束,因为我找不到第 1 代从0x3cc9d8a0开始的位置。

我认为我在这里遗漏了上述解决方案的一些基本原理。

有什么建议么?

0 投票
1 回答
725 浏览

com - 使用 Windbg 查找传递给 COM+ 方法的参数

为 COM+ 应用程序生成了一个调试诊断转储文件。经分析,看起来像是线程处的死锁OLE32!SwitchSTA。我的符号路径指向 msdl.microsoft.com/download/symbols。有没有办法知道传递给这个方法的参数是什么?

一般来说,如何使用 Windbg 找到方法调用的输入参数值?

0 投票
1 回答
14458 浏览

windbg - windbg 反汇编函数命令 (uf) 需要一些格式

附加notepad.exe后,我在windbg中执行了uf命令命令是uf notepad!WinMain我得到以下输出

依此类推..如果您在每条跳转指令之后注意到它会创建一个新块,例如

并且在

所以我想知道WinDbg中的一个设置,我可以在每次跳转时省略创建新块以进行函数反汇编。为什么我不能像使用 U 命令那样获得输出?

所以我正在寻找这样的选择

有什么帮助吗?

0 投票
10 回答
24638 浏览

reverse-engineering - 如何在内存中找到代表 Minesweeper 排雷布局的数据结构?

我正在尝试使用 Minesweeper 作为示例应用程序来学习逆向工程。我在一个简单的 WinDbg 命令上找到了这篇MSDN 文章,该命令显示了所有地雷,但它很旧,没有详细解释,也不是我想要的。

我有IDA Pro 反汇编器和WinDbg 调试器,并且我已经将 winmine.exe 加载到它们中。有人可以为这些程序中的任何一个提供一些实用技巧,以查找代表雷场的数据结构的位置吗?

在WinDbg中我可以设置断点,但是我很难想象在什么点设置断点以及在什么内存位置。同样,当我在 IDA Pro 中查看静态代码时,我什至不确定从哪里开始找到代表雷区的函数或数据结构。

Stackoverflow 上是否有任何逆向工程师可以为我指明正确的方向?

0 投票
2 回答
207 浏览

debugging - user.dmp 是否仅包含最近的崩溃

我想知道由 drwtsn32 创建的“user.dmp”是否只有最近的崩溃。我试图捕捉一些崩溃。但是当我试图分析它时,我只看到了一次崩溃。

感谢您的帮助,阿伦

0 投票
1 回答
952 浏览

windows - 如何以非侵入方式附加到已经运行的进程

我在 Visual Studio 调试器下的断点处暂停了一个进程。我可以在非侵入模式下附加尽可能多的 cdb(微软的控制台调试器)

如何使用我自己的使用调试引擎 API 的程序来实现相同的目的。

此代码导致 E_INVALIDARG。这种组合是不允许的吗?下面的一个有效,但是当它调用 GetStackTrace 时,它​​返回 E_UNEXPECTED。

我有兴趣附加到已经以非侵入方式调试中断的进程,并从其当前堆栈和一些全局变量值中获取一些局部变量。

其次,有人可以指出我用于像 !stl 那样迭代地转储符号的内存内容的函数。我需要编写一个插件来转储我的一个类似向量的结构。

谢谢

0 投票
2 回答
25833 浏览

windbg - _NT_SYMBOL_PATH 格式

我正在尝试更多地使用windbg,但符号缓存一直存在问题。我不清楚字符串的格式应该是什么。

我有几个要求:

我们在 \\foo\Build1234 的分布式构建中的符号存档未组织为符号服务器。如果我理解正确,我需要使用缓存关键字。

鉴于这些要求,这是否看起来像一个格式正确的 srvpath:

编辑:

我刚开始阅读 Advanced Windows Debugging,但我误解了 cache 关键字的工作原理。我认为这是告诉调试器该文件夹只是一个文件文件夹而不是符号服务器的一种方式。在迈克尔发表评论后,我重新阅读了该部分,发现它确实如迈克尔所描述的那样有效。

现在我对你何时使用 a 感到困惑;或 * 分隔路径/URL。当您需要 srv* 前缀时。在 windbg 的在线帮助中,他们给出了这个例子:

来自 \\someshare 的符号不被缓存,来自 Microsoft 的符号被缓存在 c:\mysymbols 中,并且 c:\mysymbols 用作 cache* 指令右侧的任何其他路径的缓存。

偶尔使用 srv* 让我感到困惑——我不明白为什么第一个和最后一个路径没有以 srv* 为前缀。

编辑2:

这对我来说慢慢开始变得有意义。srv 指令用于符号服务器,而不用于普通符号目录。所以,我相信我原来的问题的答案是这样的:

0 投票
2 回答
1281 浏览

debugging - DIA SDK 和 DbgEng 需要帮助

DIA SDK 和 DbgEng(不是 DbgHelp)是基于 COM 的 API 还是基于 DbgHelp?

如果是这样,我如何从 C# 应用程序调用 DbgEng API。我可以使用 idl 文件(用于生成的 tlib 文件的 tlibimp)将 DIA 库导入 C# 项目,但 DbgEng 没有任何 IDL 文件。

我看到了一个不完整的DbgEng包装器, 它使用托管 C++ 手动包装 API,但它错过了许多功能。我可以在不编写任何托管包装器的情况下自动在 C# 中导入 DbgEng.DLL 吗?

其次,DIA SDK 是否允许附加进程并调查内存(并可能评估表达式),例如 DbgEng 还是只是从 pdb 文件中获取符号?到目前为止,我得到的唯一例子是 Dia2dump,它只解析 pdb 文件。

0 投票
2 回答
2923 浏览

c++ - 诊断无法停止的应用程序

我们的 Windows 应用程序经常挂在内存中,我正在尝试使用 windbg 来追踪问题。我对 windbg 很陌生,可以使用一些建议(不过我已经开始阅读 Advanced Windows Debugging)。

该应用程序是用 VB 编写的 C++ 和 COM 对象的混合体。有时,当您退出时,该应用程序似乎消失了,但任务管理器显示它在内存中徘徊,显然是空闲的。

!threads 向我展示了这一点:

在我未经训练的眼睛看来,它似乎被单线程单元阻塞的 finalize 队列保持活动状态。这看起来合理吗?

~0kb 产生:

~6kb 产生:

我会很感激这里的一些课程修正。如果我对阻塞终结器的猜测似乎合理,请告诉我。我也很乐意得到一些建议来弄清楚究竟是什么阻塞了。

编辑:

Shane 询问 !analyze 的输出。这实际上来自不同的转储——我有很多,它们看起来都差不多。

0 投票
2 回答
644 浏览

com - 从 COM 接口暴露的 api 上的断点

可以说这是一个界面

这是二进制 dll 的一部分。我没有这个的源代码。

我可以在使用 Windbg 从这个二进制 dll 的接口 Ifoo 公开的 foo() API 上设置断点吗?

我知道我们可以使用 windbg 在二进制 dll 上设置断点,但使用 COM 我不确定。