.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

windbg-.foreach循环输入(windbg script)的更多相关文章

  1. Java语法糖1:可变长度参数以及foreach循环原理

    语法糖 接下来几篇文章要开启一个Java语法糖系列,所以首先讲讲什么是语法糖.语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的 ...

  2. 巧用array_map()和array_reduce()替代foreach循环

    1.array_reduce( $arr , callable $callback ) 使用回调函数迭代地将数组简化为单一的值. 其中$arr 为输入数组,$callback($result , $v ...

  3. 程序控制结构及for循环、foreach循环、迭代器

    结构化程序设计 三种基本控制结构:顺序结构.选择结构.循环结构. 在这种思想的指导下,发展出了面向过程编程方式.面向过程编程的核心是算法+数据结构.算法可以用顺序.选择.循环这三种基本控制结构来实现. ...

  4. 可变长度参数以及foreach循环原理

    语法糖 接下来几篇文章要开启一个Java语法糖系列,所以首先讲讲什么是语法糖.语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的 ...

  5. java——集合、泛型、ArrayList、LinkedList、foreach循环、模拟ktv点歌系统

    集合:一系列特殊的类,这些类可以存储任意类型的对象,长度可变,集合类都在java.util包中. 但是集合记不住对象的类型,当把对象从集合中取出时这个对象的编译类型就变成了Object类型.这样在取元 ...

  6. PHP数组foreach循环如何实现逆序访问?

    PHP数组foreach循环如何实现逆序访问? 一.总结 1.array_reverse($array) :foreach(array_reverse($array) as $key=>$val ...

  7. 项目遇到的问题:页面c:forEach循环的数据进行计算传回后台并保持到数据库

    应该还有更简单的方法 但是我不晓得 手动给文本框输入数据保存到数据库 A表 :通过订单编号 查询数据获得 B表 :通过A表中的字段查询遍历获得 问题: 手动输入文本框内容 保存到数据库 页面form提 ...

  8. java语法糖:(1)可变长度参数以及foreach循环原理

    语法糖 语法糖:是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用 ...

  9. for循环,for…in循环,forEach循环的区别

    for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...

随机推荐

  1. C#遍历可变化的集合

    如果用foreach,会造成被遍历的集合更改后带来异常问题. 方法一:用for循环可有效的解决这个问题. ;i<List.Count;i++) { if(条件是真) { List.Remove( ...

  2. JAVA-SpringMVC开发第一个应用

    找到eclipse工具路径 打开eclipse.exe 选择workspace的存放位置,点击ok 点击file-new 选择web-dynamic web project(动态web项目)-next ...

  3. 解决ThinkPHP的Create方法失效而没有提示错误信息的问题

    ThinkPHP中的数据创建Create方法是一个非常有用的功能,它自动根据表单数据创建数据对象(在表字段很多的情况下尤其明显) 但有时候该方法可能并未按照你期望的来工作,比如方法不工作而且还没有提示 ...

  4. SliTaz 5.0 截图

  5. Solidworks如何替换工程图参考零件

    不要在左侧树形图右击修改   而是要在右侧主视图上右击,替换模型   左侧浏览找到新的零件,然后打开   替换完成之后,会有一些尺寸变成黄色,只需要改动黄色部分即可,不需要每个尺寸重新标注    

  6. javascript常用的方法(二)

    //判断页面加载完毕 document.onreadystatechange = function () { if (document.readyState == "complete&quo ...

  7. ZH奶酪:Python中range和xrange的区别

    range    函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列.range示例: >>> ...

  8. JQuery 之 重置表单的方法

    由于JQuery中,提交表单是如下方式: $('#formId').submit() 想当然的认为,重置表单,应该如下: $('#formId').reset(); 但是,这样表单无法重置! 经查阅资 ...

  9. 理解Android编译命令(转)

    一.引言 关于Android Build系统,这个话题很早就打算整理下,迟迟没有下笔,决定跟大家分享下.先看下面几条指令,相信编译过Android源码的人都再熟悉不过的. source setenv. ...

  10. 背景图片自适应整个页面CSS+DIV

    <body style="overflow:hidden;"> <div class="wrapper"> <!--背景图片--& ...