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)命令。 这个?命令在当前线程和进程的上下文中计算表达式中的符号。某些字符串可能包含转义符,例如\n、\“、\r和\b,这些转义符是为了从字面上读取,而不是由计算器解释。如果字符串中的转义由计算器解释,则可能发生计算错误。例如:
0:000> as AliasName c:\dir\name.txt 0:000> al Alias Value ------- ------- AliasName c:\dir\name.txt 0:001> ? $spat( "c:\dir\name.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\name.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。
为虫子生,为虫子死,为虫子奋斗一辈子