windbg-.foreach循环输入(windbg script)

.foreach

.foreach 关键字分析一个或多个命令的输出并将该输出中每一个值作为另一个或多个命令的输入

.foreach [Options( Variable  { InCommands } ) { OutCommands 

.foreach 
[Options/s ( Variable  "InString) { OutCommands 

.foreach 
[Options/f ( Variable  "InFile) { OutCommands } 

Options
可以是下面选项的任意组合:
/pS InitialSkipNumber
使得开头的一些符号被跳过。InitialSkipNumber 指定不传递给OutCommands 的输出关键字的数量。
/ps SkipNumber
每次执行命令时都会跳过一些符号。每次将符号传递给OutCommands 之后,SkipNumber 个数的符号都会被忽略

我们首先搜索下带字符T的地址有哪些:

 
  1. 0:000> s -[1]a  0029eeec  L1000 "T"  
  2. 0x0029eefb  
  3. 0x0029ef03  
  4. 0x0029ef0b  
  5. 0x0029ef15  
  6. 0x0029f034  
  7. 0x0029f06a  
  8. 0x0029f07a  
  9. 0x0029f08a  
  10. 0x0029f09e  
  11. 0x0029f356  
  12. 0x0029f7f0  
  13. 0x0029f989  
  14. 0x0029fa50  

 

然后我们用.foreach把它们da出来

 
  1. 0:000> .foreach(place{s -[1]a  0029eeec  L1000 "T"}){da ${place}}  
  2.                        ^ Syntax error in '.foreach(place{s -[1]a  0029eeec  L1000 "T"}){da ${place}}'  
  3. 0:000> .foreach(place {s -[1]a  0029eeec  L1000 "T"}){da ${place}}  
  4. 0029eefb  "Tencent\TSVulFw\TSVulFW.DAT"  
  5. 0029ef03  "TSVulFw\TSVulFW.DAT"  
  6. 0029ef0b  "TSVulFW.DAT"  
  7. 0029ef15  "T"  
  8. 0029f034  "T"  
  9. 0029f06a  "T"  
  10. 0029f07a  "T"  
  11. 0029f08a  "T"  
  12. 0029f09e  "T"  
  13. 0029f356  "TxSignDemo"  
  14. 0029f7f0  "T.)"  
  15. 0029f989  "Ti.."  
  16. 0029fa50  "T.)"  

注意place和{之间必须有空格!

现在从第三个开始,每隔一个显示一个:

 

  1. 0:000> .foreach/pS3 /ps1(place {s -[1]a  0029eeec  L1000 "T"}){da ${place}}  
  2. 0029ef15  "T"  
  3. 0029f06a  "T"  
  4. 0029f08a  "T"  
  5. 0029f356  "TxSignDemo"  
  6. 0029f989  "Ti.."  

 

InFile
/f 一起使用。指定要解析的文本文件;结果会传递给OutCommands 。文件名InFile 必须用引号括起来我们在C盘建立个2.txt,内容为:

 

 
  1. 0x0029eefb  
  2. 0x0029ef03  
  3. 0x0029ef0b  
  4. 0x0029ef15  
  5. 0x0029f034  
  6. 0x0029f06a  
  7. 0x0029f07a  
  8. 0x0029f08a  
  9. 0x0029f09e  
  10. 0x0029f356  
  11. 0x0029f7f0  
  12. 0x0029f989  
  13. 0x0029fa50  


运行命令:

 
  1. 0:000> .foreach/f (place "c:\2.txt"){da ${place}}  
  2. 0029eefb  "Tencent\TSVulFw\TSVulFW.DAT"  
  3. 0029ef03  "TSVulFw\TSVulFW.DAT"  
  4. 0029ef0b  "TSVulFW.DAT"  
  5. 0029ef15  "T"  
  6. 0029f034  "T"  
  7. 0029f06a  "T"  
  8. 0029f07a  "T"  
  9. 0029f08a  "T"  
  10. 0029f09e  "T"  
  11. 0029f356  "TxSignDemo"  
  12. 0029f7f0  "T.)"  
  13. 0029f989  "Ti.."  
  14. 0029fa50  "T.)"  

 

InCommands 的输出、InString 字符串或InFile 被解析时,任何数量的空格、tab符或回车都将会被当作单个分隔符。文本被分隔成的小片段被用来替换OutCommands 中的Variable

 

/s 一起使用。指定一个要解析的字符串;结果会传递给OutCommands

 
  1. 0:000> .foreach/s (place "0029ef03;0029ef0b"){da ${place} }  
  2. 0029ef03  "TSVulFw\TSVulFW.DAT"  
  3.                    ^ Syntax error in 'da 0029ef03;0029ef0b '  
  4. 0:000> .foreach/s (place "0029ef03 0029ef0b"){da ${place}}  
  5. 0029ef03  "TSVulFw\TSVulFW.DAT"  
  6. 0029ef0b  "TSVulFW.DAT"  


所以,只是把空格,tab当成分隔符,不是分号!此原则适用于string和file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值