【问题标题】:Matching an address to a stack during Windbg Kernel Debugging在 Windbg 内核调试期间将地址与堆栈匹配
【发布时间】:2012-12-10 08:40:15
【问题描述】:

我在调试时找到了一个地址,我怀疑它属于某个进程的某个线程的调用堆栈。

找出它是哪个线程的最佳方法是什么(或者我的假设是错误的)?

附:我本可以反复使用!process,然后使用.process!thread,但一定有更好的方法。

附言不幸的是,我无法在用户模式调试时重现这种情况。

提前致谢。

【问题讨论】:

  • '[address] 属于调用堆栈'是什么意思?也许您的意思是说地址在为堆栈分配的段中?

标签: kernel windbg callstack


【解决方案1】:

首先,如果您加载了符号,您可以使用ln <address> 从地址中收集一些信息。从那里,应该不难猜测涉及哪个进程/线程。

如果这不能满足您的需求,您可以继续使用蛮力方法。最好的搜索选择是以更可搜索的格式自动获取调用堆栈。下面会将它们全部写入一个文件,您可以使用您喜欢的文本编辑器更轻松地搜索该文件。

.logopen c:\stacks.txt; !for_each_process "!process @#Process; ~*kv1000"; .logclose

这需要一些时间,所以去喝杯咖啡吧。如果你觉得幸运,你可以直接从 windbg 搜索输出,如下所示:

.shell -ci "!for_each_process \"!process @#Process; ~*kv1000\"" findstr "deadbeef"

(将 deadbeef 替换为您要查找的地址)

希望这能满足您的需求,或者至少可以引导您编写解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多