微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windbg 条件内存搜索

如何解决Windbg 条件内存搜索

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

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

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

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

解决方法

问题是 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"

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。