【问题标题】:Windbg conditional memory searchWindbg 条件内存搜索
【发布时间】:2021-02-27 17:02:36
【问题描述】:

当寄存器中的地址指向具有某种模式的内存块并且该模式未固定为偏移时,我需要在调试器 windbg 中设置断点 像

bp ws2_32!sendto "j s @rdx @rdx+100 53 65 6e 64 g"

如何正确地写这个条件? 所以我只需要在 rdx 和 rdx+100 内的地址范围内有这种模式 53 65 6e 64

时才需要中断 sendto
bp ws2_32!sendto ".if(s @rdx @rdx+100 53 65 6e 64) == 0 { g }" error too

【问题讨论】:

    标签: debugging windbg breakpoints conditional-breakpoint


    【解决方案1】:

    问题是s 不构成有效条件。它要么打印结果,要么不打印。

    演示准备

    2:007> .dvalloc 1000
    Allocated 1000 bytes starting at 003b0000
    
    2:007> eb 003b0000 53 65 6e 64
    
    2:007> db 003b0000 L10
    003b0000  53 65 6e 64 00 00 00 00-00 00 00 00 00 00 00 00  Send............
    

    使用s的测试

    2:007> s-a 003b0000 L100 "Send"
    003b0000  53 65 6e 64 00 00 00 00-00 00 00 00 00 00 00 00  Send............
    
    2:007> s-a 003b0000 L100 "Test"
    

    您可以在s 的输出上使用.foreach。它将为输出中的每个单词运行命令,这太多了:

    2:007> .foreach (output {s-a 003b0000 L100 "Send"}) { .echo "found" }
    found
    found
    found
    found
    [...]
    

    所以让我们利用s 有一个特殊选项来仅输出地址这一事实

    2:007> .foreach (output {s-[1]a 003b0000 L100 "Send"}) { .echo "found" }
    found
    

    目前我无法使用您的断点进行复制,但它应该看起来像

    bp ws2_32!sendto ".foreach (output {s-[1]a @rdx L100 "Send"}) { g }"
    

    这在搜索字节而不是 ASCII 字符串以及使用寄存器而不是地址时也应该有效

    2:007> r eax = 003b0000
    
    2:007> .foreach (output {s-[1]b @eax L100 53 65 6e 64}) { .echo "found" }
    found
    

    【讨论】:

    • 谢谢我也有疑问,这个 foreach 可以工作,但由于某种原因,即使没有模式,条件断点总是会触发,bp ws2_32!sendto ".foreach /ps 100 (output {s-b @rdx L100 07 00 00 } ) { .echo 'hit'; g }" 它看起来是否 bp 不等待 foreach 完成并且总是得到 TRUE 我尝试了解决方法像这样bp ws2_32!sendto ".foreach /ps 100 (output {s-b @rdx L100 07 00 00 } ) { .break }; g",但它总是错过断点和foreach函数因为'g'而没有被执行
    • @andrey2003: 是的,观察是正确的:断点没有条件,所以它总是触发,这意味着它总是会搜索内存并总是循环遍历结果并在找到东西时继续.而你想要相反的......该死的!
    • 暂时不要接受答案
    • 我猜你需要$spat() 和别名的怪异组合,如下所述:stackoverflow.com/a/46434142/480982
    • 我有这个想法我想出了这个pastebin.com/btfCcPnu 但是如何结合别名和bp?像这样的东西:pastebin.com/spUCMNUF
    猜你喜欢
    • 2012-06-03
    • 2023-03-04
    • 1970-01-01
    • 2011-01-02
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多