• 1463阅读
  • 1回复

50.windbg-.foreach循环输入(windbg script) [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-12




.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的地址有哪些:


[html] view plain copy
  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出来



[html] view plain copy
  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和{之间必须有空格!现在从第三个开始,每隔一个显示一个:


[html] view plain copy
  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,内容为:


[html] view plain copy

  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  


运行命令:


[html] view plain copy

  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



[html] view plain copy

  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


善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线v2680267313

只看该作者 沙发  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个