WinDbg - 将字符串参数与内存中的字符串进行比较

gol*_*sky 2 windows debugging windbg low-level

我需要比较一个字符串,作为参数传递给WinDbg与来自内存的字符串.怎么能实现这一目标?

例如,字符串位于加载的PE内的特定偏移量中.所以,我可以通过执行轻松读取字符串da /c 100 <addr>.但是,如何使用此字符串arg1,在WinDbg脚本中使用.if?(而且$SPAT(),我猜)

我试图将da命令的输出读入别名或用户定义的寄存器,但我没有成功.

Tho*_*ler 5

您可以使用以下命令将字符串分配给别名as /c:

0:012> as /c Hello .printf "%ma", 06130000
0:012> .echo @"${Hello}"
Hello world
Run Code Online (Sandbox Code Playgroud)

然后你可以使用$spat()它:

0:012> ? $spat(@"${Hello}","*ell*")
Evaluate expression: 1 = 00000000`00000001
0:012> ? $spat(@"${Hello}","x*")
Evaluate expression: 0 = 00000000`00000000
Run Code Online (Sandbox Code Playgroud)

要从命令行控制模式,请使用-c命令行开关设置另一个别名:

windbg -c "as Pattern *ell*"

// this line is from the command line argument
0:006> as Pattern *ell*

0:006> .dvalloc 1000
Allocated 1000 bytes starting at 04610000
0:006> ea 04610000 "Hello world"
0:006> as /c Hello .printf "%ma", 04610000
0:006> .echo ${Pattern}
*ell*
0:006> .echo ${Hello}
Hello world
0:006> ? $spat(@"${Hello}", @"${Pattern}")
Evaluate expression: 1 = 00000001
Run Code Online (Sandbox Code Playgroud)