• WinDbg常用命令系列---?*


    ? (Command Help)

    问号(?)字符显示所有命令和运算符的列表。问号本身显示命令帮助。

    环境

    模式

    用户模式下,内核模式

    目标

    实时、 崩溃转储

    平台

    全部

    0:000> ?
    
    Open debugger.chm for complete debugger documentation
    
    B[C|D|E][<bps>] - clear/disable/enable breakpoint(s)
    BL - list breakpoints
    BA <access> <size> <addr> - set processor breakpoint
    BP <address> - set soft breakpoint
    D[type][<range>] - dump memory
    DT [-n|y] [[mod!]name] [[-n|y]fields]
       [address] [-l list] [-a[]|c|i|o|r[#]|v] - dump using type information
    DV [<name>] - dump local variables
    DX [-r[#]] <expr> - display C++ expression using extension model (e.g.: NatVis)
    E[type] <address> [<values>] - enter memory values
    G[H|N] [=<address> [<address>...]] - go
    K <count> - stacktrace
    KP <count> - stacktrace with source arguments
    LM[k|l|u|v] - list modules
    LN <expr> - list nearest symbols
    P [=<addr>] [<value>] - step over
    Q - quit
    R [[<reg> [= <expr>]]] - view or set registers
    S[<opts>] <range> <values> - search memory
    SX [{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*}] - event filter
    T [=<address>] [<expr>] - trace into
    U [<range>] - unassemble
    version - show debuggee and debugger version
    X [<*|module>!]<*|symbol> - view symbols
    ? <expr> - display expression
    ?? <expr> - display C++ expression
    $< <filename> - take input from a command file
    
    Hit Enter...
    

    ? (Evaluate Expression)

    问号(?)命令计算并显示表达式的值。

    ? Expression
    

    参数

    • Expression
      指定要计算的表达式

    环境

    模式

    用户模式下,内核模式

    目标

    实时、 崩溃转储

    平台

    全部

    这个命令的输出取决于您使用的是MASM表达式语法还是C++表达式语法。如果使用MASM语法,则输入和输出取决于当前基数。要更改基数,请使用n (Set Number Base)命令。 这个?命令在当前线程和进程的上下文中计算表达式中的符号。某些字符串可能包含转义符,例如 、“、 和,这些转义符是为了从字面上读取,而不是由计算器解释。如果字符串中的转义由计算器解释,则可能发生计算错误。例如:

     0:000> as AliasName c:dir
    ame.txt
    0:000> al
      Alias            Value
     -------          -------
     AliasName        c:dir
    ame.txt
    0:001> ? $spat( "c:dir
    ame.txt", "*name*" )
    Evaluate expression: 0 = 00000000
    0:001> ? $spat( "${AliasName}", "*name*" )
    Evaluate expression: 0 = 00000000
    0:001> ? $spat( "c:dir", "*filename*" )
    Syntax error at '( "c:dir", "*filename*" )
    

    在前两个示例中,即使字符串与模式匹配,计算器仍返回值false。在第三种情况下,由于字符串以反斜杠()结尾,因此计算器无法进行比较,因此“由计算器转换。 要让计算器逐字解释字符串,必须使用@“string”语法。下面的代码示例显示了正确的结果:

    0:000> ? $spat( @"c:dir
    ame.txt", "*name*" )
    Evaluate expression: 1 = 00000000`00000001
    0:000> ? $spat( @"${AliasName}", "*name*" )
    Evaluate expression: 1 = 00000000`00000001
    0:001> ? $spat( @"c:dir", "*filename*" )
    Evaluate expression: 0 = 00000000
    

    在前面的示例中,$spat masm运算符检查第一个字符串,以确定它是否与第二个字符串的模式匹配(不区分大小写)。

    ?? (Evaluate C++ Expression)

    双问号(??)命令根据C++表达式规则来评估和显示表达式的值。
    ?? Expression
    

    参数

    • Expression
      指定要计算的C++表达式。

    环境

    模式

    用户模式下,内核模式

    目标

    实时、 崩溃转储

    平台

    全部

     这个??命令在当前线程和进程的上下文中评估表达式中的符号。如果要根据MASM表达式规则计算表达式的一部分,请将该部分括在括号中,并在前面的符号(@@)处添加两个。
     
    下面给个?(表达式) ??(表达式)的例子看看他们的差别:
    0:000> ? 1+1
    Evaluate expression: 2 = 00000002
    

     可以看到是以MASM的表达式来计算的,结果就是个十六进制的数

    0:000> ?? 1+1
    int 0n2
    

    可以看到是以C++的表达式来计算的,结果就是个十进制的数,且带有类型信息int。

  • 相关阅读:
    socket阻塞与非阻塞,同步与异步
    Python列表切成多个/生成多个空列表
    virtualbox 下windows与虚拟机实现文件共享---挂载
    centos安装mysql
    centos安装Python2.7
    在遍历或者迭代过程中对集合进行增删 都会发生异常(迭代器的并发异常)
    List
    LinkedList
    增强for循环
    Collection中的迭代器
  • 原文地址:https://www.cnblogs.com/yilang/p/11438882.html
Copyright © 2020-2023  润新知