【问题标题】:WinDbg script parsing alias of double-quoteWinDbg 脚本解析双引号的别名
【发布时间】:2013-09-26 14:35:24
【问题描述】:

我正在编写一个脚本,该脚本运行几个 WinDbg 命令,输出一些输出,并使用 .foreach 解析其他命令。

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

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 ''

...

创建一个别名“command”,即该命令,然后运行:

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

会报错:

Syntax error at .echo """"

如果单词是“”,有什么方法可以 .continue 吗??

运行 al 显示如下:

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

【问题讨论】:

标签: string parsing windbg


【解决方案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

【讨论】:

  • 这对 echo 有效,但对 $spat 无效 -- .foreach (word {command}) {.if($spat('""','word'){.echo Is}。 else{.echo Isnt}} '('""','+0x000'){.echo Is}.else{.echo Isnt} 处的语法错误我得看看 PyKd;我正在编写这个脚本对于其他人,我不知道它的部署范围有多广(如果使用此脚本的每个人都拥有安装 Python/PyKd 的管理员权限)
  • 虽然 WinDbg-native 答案会很好,但这是一个功能性替代方案。接受为最佳答案(除非有人想出 WinDbg 原生方式)
  • 你可以使用 .catch 来忽略错误: .foreach(word {command}) { .catch { .if { $spat( "pattern", "${word}" ) { .echo "找到模式" } } } 你会看到错误消息,但你的脚本会到达末尾
猜你喜欢
  • 2018-09-05
  • 2010-10-03
  • 1970-01-01
  • 2022-10-17
  • 2021-11-11
  • 1970-01-01
  • 2023-03-15
  • 2021-12-16
  • 2014-03-27
相关资源
最近更新 更多