【问题标题】:how to set a memory breakpoint in windbg kernel mode?如何在windbg内核模式下设置内存断点?
【发布时间】:2016-06-12 05:33:01
【问题描述】:

我想在内核模式调试器的windbg中设置访问内存断点

我希望每当内核调试器在用户模式下的特定模块被命中时,调试器就会中断。

但是我在某处读到它无法设置它,为了制作内存断点我必须编写一个插件来制作它

我尝试使用带有 !vprotect 命令的 SDbgExt 插件,但无法设置内存 bp

如果我必须写一个插件来允许内核模式下的内存bp 它必须是一个驱动程序?

我已经阅读了 windows internals book 中的一些章节,但它对我一点帮助都没有。

我找不到太多关于如何开始处理它的信息

【问题讨论】:

  • 欢迎来到 SO,请在提问时更具体一点:您尝试过什么,您期望什么等。请参阅how to ask

标签: debugging memory reverse-engineering windbg breakpoints


【解决方案1】:

您可以从内核模式在用户模式地址上设置断点。您唯一应该注意的是使用“.process /i”命令切换到正确的进程

【讨论】:

  • 问题不是设置断点本身,问题是设置内存断点从内核模式访问所有区域没有命令来做它
【解决方案2】:

如果它是一次性断点——也就是说,您满足于通过调试破坏进程——使用 e 命令(编辑内存)将整个模块清零。将整个设置为 cc (据我所知,它是 int 3 )......零也可以。只要你接触到任何模块的代码,你就会崩溃。

下一步,记住你所在的位置(相对于模块)并设置适当的断点。

希望对您有所帮助。

(编辑)你有完整的符号吗?如果你这样做了,你有没有尝试过 bm 模块!*

【讨论】:

  • 我在访问时需要一个内存断点,int 3(0xcc) 对我没有帮助,因为它以另一种方式工作,我不知道我想在哪里中断我想知道它从哪里调用的模块唯一的方法是在所有区域的访问中设置mem bp,例如我的地址从6fd00000开始,地址在6ff00000结束。我想在访问时在这两个范围 mem bp 之间进行设置,所以当它到达我控制的地方并从它发生的地方查看我没有应用程序的符号
【解决方案3】:

听起来您想设置“访问断点”,而不是指定地址,而是指定范围?我从未见过它在windbg中完成。 BA 断点使用硬件调试寄存器,而不是像 SW 断点那样插入 INT,因此这绝对是特定于硬件平台的。 我曾经使用硬件调试器在 ARM 芯片组上完成了这项工作。 ARM 上的 ETM 允许您在地址范围内设置触发器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多