2013-09-25 52 views
1

我正在处理脚本,该脚本运行一些WinDbg命令,输出一些输出,并使用.foreach解析其他脚本。WinDbg脚本解析双引号别名

我的问题是,当我尝试运行:

0: kd> dt -b -r 0xdeadbeef drivername!DRIVER_DEVICE_CONTEXT 

输出看起来是这样的:

+0x000 variable1 : 5 
    +0x004 variable2 : 0 
    +0x008 variable3 : 1 
    +0x00c variable4 : 1 
    +0x010 variable5 : 8 
    +0x014 variable6 : (null) 
    +0x018 variable7 : 1 
    +0x01c table1 : "" 
    [00] 0 '' 
    [01] 0 '' 
    [02] 0 '' 
    [03] 0 '' 

...

创建别名 '命令',这是该命令,然后运行:

.foreach(word {command}) { .echo "word" } 

会给出错误:

Syntax error at .echo """" 

有什么办法,如果单词是“只。继续”?

运行人显示以下内容:

Alias   Value 
-------   ------- 
command   dt -b -r 0xdeadbeef drivername!DRIVER_DEVICE_CONTEXT 
word    "" 
+0

我还张贴了这个位置,因为有相对较少的人是在WinDbg中的脚本知识渊博。我会尽量保持这两个同步。 http://social.msdn.microsoft.com/Forums/en-US/a29e74c5-63f3-4478-8f44-780a2d774542/windbg-script-parsing-alias-of-doublequote –

回答

1

试着用单引号:

.foreach(word {command}) { .echo 'word' } 

我可以推荐你使用Python使用WinDbg?它将使你的生活更轻松:)

pykd.codeplex.com

如果不喜欢你,你总是可以将其返回:)。

例如:

DRIVER_DEVICE_CONTEXT = typeInfo("drivername!DRIVER_DEVICE_CONTEXT") 

for fieldName, fieldType in DRIVER_DEVICE_CONTEXT: 
    print fieldName 
+0

那么,它适用于回声但$ spat失败 - .foreach(word {command}){.if($ spat('''','word'){。echo Is} .else {.echo Isnt}} '('“'', '+ 0x000'){。echo Is} .else {.echo Isnt} 我将不得不看到关于PyKd的信息;我正在为其他人开发这个脚本,我不知道它将部署多么广泛(如果每个人都使用这个脚本有管理权限来安装Python/PyKd) –

+0

虽然WinDbg本地答案会很好,但这是一个功能替代方案。接受最佳答案(除非有人用WinDbg本机方式计算) –

+0

使用.catch忽略错误: .foreach(word {command}){.catch {.if {$ spat(“pattern”,“$ {word}”){.echo“Found patte “”}}} 你会看到错误信息,但你的脚本会到达最后 –