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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...