zoukankan      html  css  js  c++  java
  • 再谈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 Files1.wds  1 2 3 4 
    Command file execution failed, Win32 error 0n2
        "系统找不到指定的文件。"
    0:000> $$>a< "C:Program Files1.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
  • 相关阅读:
    好用的PHP读取EXCEL类
    PHP获取函数参数数组
    在 Win7 下运行 TC 2.0 / TC3.0 / BC 3.1 / QB 4.5 等 DOS 开发工具
    用PHP生成等比图像的方法
    判断当前发布日期是否超过今天
    HTTP响应代码中文详解
    __autoload自动加载函数
    __isset魔术方法
    php下载远程文件类(支持断点续传)
    用PHP保存从摄像头拍下来的图片
  • 原文地址:https://www.cnblogs.com/yilang/p/12160623.html
Copyright © 2011-2022 走看看