? (计算表达式)
问号 (?
) 命令计算并显示表达式的值。
问号本身(?)显示命令帮助。 表达式?
命令计算给定表达式。
? 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 运算符检查第一个字符串,以确定它是否与第二个字符串的模式匹配(不区分大小写)。 有关 MASM 运算符的详细信息,请参阅 MASM 数字和运算符 主题。