再谈Windbg脚本装载指令

装载指令和文件路径前的空格问题

单个$装载的

  • $<filename
  • $><Filename

此两种方式,要求文件路径和前面的标识符紧贴,不允许有空格。

示例如下:

0:000> $<f:\1.wds
0:000> .echo hello windbg
hello windbg
0:000> $< f:\1.wds
Command file execution failed, Win32 error 0n123
    "文件名、目录名或卷标语法不正确。"
0:000> $><f:\1.wds
hello windbg
0:000> $>< f:\1.wds
Command file execution failed, Win32 error 0n2
    "系统找不到指定的文件。"

两个$装载的

  • $$<filename
  • $$><Filename

支持Filename之前带空格

示例如下:

0:000> $$<f:\1.wds
0:000> .echo hello windbg
hello windbg
0:000> $$<         f:\1.wds
0:000> .echo hello windbg
hello windbg
0:000> $$><f:\1.wds
hello windbg
0:000> $$><          f:\1.wds
hello windbg

所以,建议用$$

脚本参数传递问题

使用形式如下:

$$>a< Filename [arg1 arg2 arg3 ... ]

argn:指定任意数目的参数,用于调试器传送给脚本,在执行脚本文件之前,脚本文件中任意${$argn}格式的字符串,对应被调试器传送进来的argn替换,
参数中不能包括引号或分号,多个参数应该用空格来分隔开,如果一个参数包含了空格,那么就用引号把它括起来,你可以使用任意多的参数,如果这个参数没被传入,就直接显示${$arg1}
看如下脚本:

.echo 第一个参数 ${$arg1}.
.echo 第五个参数 ${$arg5}.
.echo 第四个参数${$arg4}.

执行情况如下:

  1. 不传参数

    0:000> $$>a<f:\1.wds
    第一个参数 ${$arg1}.
    第五个参数 ${$arg5}.
    第四个参数${$arg4}.
  2. 全部参数

    0:000> $$>a<f:\1.wds a b c d e f
    第一个参数 a.
    第五个参数 e.
    第四个参数d.
  3. 部分参数

    0:000> $$>a<f:\1.wds a b c d
    第一个参数 a.
    第五个参数 ${$arg5}.
    第四个参数d.
  4. 参数带空格
    先看没有空格的

    0:000> $$>a<f:\1.wds ab bc cd de ef
    第一个参数 ab.
    第五个参数 ef.
    第四个参数de.

    带空格不加引号

    0:000> $$>a<f:\1.wds ab bc cd de e f
    第一个参数 ab.
    第五个参数 e.
    第四个参数de.

    带空格加引号

    0:000> $$>a<f:\1.wds ab bc cd de "e f"
    第一个参数 ab.
    第五个参数 e f.
    第四个参数de.

其他

$$>a< script文件参数中带空格:那么就把它用双引号括起来,这同样适用于Filename

0:000> $$>a< C:\Program Files\1.wds  1 2 3 4
Command file execution failed, Win32 error 0n2
    "系统找不到指定的文件。"
0:000> $$>a< "C:\Program Files\1.wds"  1 2 3 4
The first argument is 1.
The fifth argument is ${$arg5}.
The fourth argument is 4.

如果使用$<或$><,你不能在Filename之前加任意空格,你也不能使用引号把Filename括起来,你也不能在这个命令后加分号或其他命令!

0:000> $><f:\1.wds
The first argument is ${$arg1}
The fifth argument is ${$arg5}
The fourth argument is ${$arg4}
0:000> $><    f:\1.wds
Command file execution failed, Win32 error 0n2
    "系统找不到指定的文件。"
0:000> $><  "f:\1.wds“;
Command file execution failed, Win32 error 0n2
    "系统找不到指定的文件。"
0:000> $><c:\1.txt;r eax
Command file execution failed, Win32 error 0n2
    "系统找不到指定的文件。"

如果你使用$$<或><,那么Filename之前可以不带空格,你能在这个命令之后使用一个分号或其他命令,你可以选择Filename使用引号括起来,但不是必需的,即使Filename中含有空格或同一行中有其他命令(这个前面肯定要带分号来分隔不同命令):

0:000> $$> f:\1.wds
The first argument is ${$arg1}
The fifth argument is ${$arg5}
The fourth argument is ${$arg4}
0:000> $$><f:\1.wds
The first argument is ${$arg1}
The fifth argument is ${$arg5}
The fourth argument is ${$arg4}
0:000> $$><"f:\1.wds"
The first argument is ${$arg1}
The fifth argument is ${$arg5}
The fourth argument is ${$arg4}
0:000> $$><f:\1.wds; r ebx
The first argument is ${$arg1}
The fifth argument is ${$arg5}
The fourth argument is ${$arg4}
ebx=00000000

也就是><或<会把分号之前(如果没有分号就是整行)都当成Filename。

$< 和$$<关键字逐个执行脚本文件中的命令(多个命令就是一个一个命令输出)。

$><和$$><关键字打开脚本文件,将所有回车替换为分号,然后将转换后的文本当作单个命令块来执行。这些关键字在运行包含调试器命令程序的脚本时非常有用。

注意是<和><的区别

把1.wds改成如下:

 .echo cmd1
 .echo cmd2

执行:

0:000> $<f:\1.wds
0:000> .echo cmd1
cmd1
0:000> .echo cmd2
cmd2
0:000> $><f:\1.wds
cmd1
cmd2

原文地址:https://www.cnblogs.com/yilang/p/12160623.html

时间: 2024-08-11 10:02:41

再谈Windbg脚本装载指令的相关文章

再谈MySQL全库备份

再谈MySQL全库备份 简介 Part1:写在最前 在很早之前,我写过一个MySQL生产库全库备份脚本,今天有同事问我是不是要再加一个-R参数来备份存储过程,理由的话是由于mysqldump --help中 关于存储过程的默认备份是false. routines                          FALSE MySQL生产库全库备份脚本 http://suifu.blog.51cto.com/9167728/1758022 实战 Part1:写在最前 我备份一般就三个参数 --s

再谈Unity调用Android的Activity

这段时间在研究Unity4.3开发环境下,如何调用由Android SDK4.4.2写的Activity.参考了很多网上的博客,百度出了几十篇大部分都是转载雨松MOMO的,这里必须向雨松MOMO表示敬意!但雨松MOMO写的博客太旧了,不少内容已经过时,我严格按他说的步骤进行,还是出了问题,所以本博客就是告诉大家在Unity4.3+Android SDK4.4.2环境,起动Activity的细节. 我这篇博客不会从零讲起,所以首先给出两个重要的链接,大家应该看一下: 第一个是雨松MOMO的  ht

软考复习之路—再谈组成原理

指令系统 指令系统是计算机硬件的语言系统,与硬件的联系息息相关. 指令系统是指CPU所能够处理的全部指令的集合,是一个CPU的根本属性(指令系统决定了一个CPU能运行 什么样的程序).现在cpu仍然使用者X86指令集,不同类型的计算机包含的指令系统的种类和数目是不同的. 所有采用高级语言编出的程序,都需要编译或者解释成为机器语言后才能运行(编译原理),这些机器语 言中所包含的就是一条条的指令.一条指令就是机器语言的一个语句,它是一组有意义的二进制代码. 格式 零地址 在堆栈型计算机中,操作数一般

WCF技术剖析之二:再谈IIS与ASP.NET管道

原文:WCF技术剖析之二:再谈IIS与ASP.NET管道 在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NET运行时管道的文章,深入介绍了IIS 5.x与IIS 6.0HTTP请求的监听与分发机制,以及ASP.NET运行时管道对HTTP请求的处理流程: [原创]ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI [原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part I

Java编程思想(十八) —— 再谈反射

在Java编程思想(十五) -- 类型信息之反射和Java编程思想(十六) -- 联系JVM再谈Class,书上只用了3页就讲完了,还有讲了那么多Class的东西,接下来要从反射中怎么用,自己结合API和其他资料再写多一些. 示例:Test.java public class Test { public Test() {     }      public Test(int i) {         System.out.println(i);     } private void pri()

再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

Angular 的数据绑定采用什么机制,详述原理? 脏检查机制.阐释脏检查机制,必须先了解如下问题. 单向绑定(ng-bind) 和 双向绑定(ng-model) 的区别? ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}. 两者的区别在于页面没有加载完毕 {{val}} 会直接显示到页面,直到 Angular 渲染该绑定数据(这种行为有可能将 {{val}} 让用户看到):而 ng-bind 则是在 Angular 渲染完毕后将数据显示. ng-

沉淀再出发:再谈java的多线程机制

沉淀再出发:再谈java的多线程机制 一.前言 自从我们学习了操作系统之后,对于其中的线程和进程就有了非常深刻的理解,但是,我们可能在C,C++语言之中尝试过这些机制,并且做过相应的实验,但是对于java的多线程机制以及其中延伸出来的很多概念和相应的实现方式一直都是模棱两可的,虽然后来在面试的时候可能恶补了一些这方面的知识,但是也只是当时记住了,或者了解了一些,等到以后就会变得越来越淡忘了,比如线程的实现方式有两三种,线程池的概念,线程的基本生命周期等等,以及关于线程之间的多并发引起的资源的抢占

从一起“盗币”事件再谈合约安全问题

目录 从一起"盗币"事件再谈合约安全问题 一. 起因 二. solidity复杂变量的地址计算问题 一个示例 简单变量的地址 动态数组以及Map的地址 三. 先来玩demo 部署合约 初次调用newRecords 从失败中找到正确方法 构造成功的调用 四. 再一起来玩DVPgame 覆盖token 随便转点以太坊给DVPgame 看看别人怎么玩的 五. 剩下的问题 六. 小测试工具 从一起"盗币"事件再谈合约安全问题 本来是受到从一起"盗币"事件

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he