windbg scripting if else if output matches
I'd like to set a breakpoint at a certain function, and each time it breaks, I'd like to search a memory range for a certain string. If that string exists, I'd like to not conti开发者_JS百科nue. If it does, then continue. Any suggestions? I'm thinking it'd look something like this:
.foreach /s line (s -a 0 L?0xfffffff "UNIQUE_STRING") { .if (line =~ "UNIQUE_STRING") { .break } .else { gc } }
I'm not too familiar with the .foreach commmand, so I might have gotten it a little wrong. My other idea was something like this:
.if ((.shell -ci "s -a 0 L?0xfffffff \"UNIQUE_STRING\"" findstr "UNIQUE_STRING") != "") {} .else { gc }
Has anybody done something like this? (sorry, some of that is extreme pseudo code)
Have you thought about doing this as an extension instead? IDebugDataSpaces::SearchVirtual returns an error if the pattern isn't found, which would make this easier on you.
-scott
I think your command syntax is a little wrong. Try:
bu module!Class::Function ".if (condition) { .echo hit_breakpoint } .else { gc }"
Everytime the debugger hits Function() it will execute the echo statement if the condition is true.
Look up 'conditional breakpoints' in .hh (windbg help) for great information as well.
加载中,请稍侯......
精彩评论