.echo 5+;“5个显示器”;5+;5“;在WinDBG。是否可以使其显示10?

.echo 5+;“5个显示器”;5+;5“;在WinDBG。是否可以使其显示10?,windbg,Windbg,请注意: 0:033> .echo 5+5 5+5 0:033> ? 5+5 Evaluate expression: 10 = 00000000`0000000a 0:033> r @$t0=5+5 0:033> r @$t0 $t0=000000000000000a 0:033> .echo @$t0 @$t0 ?几乎是我所需要的,但它太冗长了。是否有一种方法可以对表达式调用.echo,以便它显示表达式的结果而不是表达式文本?。printf可以立即执行此操作:

请注意:

0:033> .echo 5+5
5+5
0:033> ? 5+5
Evaluate expression: 10 = 00000000`0000000a
0:033> r @$t0=5+5
0:033> r @$t0
$t0=000000000000000a
0:033> .echo @$t0
@$t0

几乎是我所需要的,但它太冗长了。是否有一种方法可以对表达式调用
.echo
,以便它显示表达式的结果而不是表达式文本?

。printf
可以立即执行此操作:

0:000> .printf "%d", 5+5
10
当然,您也可以通过破解
.echo
获得十进制甚至十六进制:

0:000> .foreach /pS 2 /ps 2 (word {? 5+5}) { .echo ${word}}
10
0:000> .foreach /pS 4 (word {? 5+5}) { .echo ${word}}
0000000a
< > C++表达式评价(<代码>?<代码>)输出相关,但类型信息

0:000> ?? 5+5
int 0n10

当我需要普通输出时,我使用这样的脚本文件

脚本文件中需要分号或空行 设置别名不能是脚本文件中的第一个命令

编辑

当一行以as命令开头时,该行中会出现别名和标记 没有扩展。如果我们在as前面加上分号或空格 命令,则展开已具有值的任何别名或令牌

像这样使用它

0:000> $$>a< eval.txt 5 + 5
0xa
0:000> $$>a< eval.txt f + f
0x1e
0:000> $$>a< eval.txt f + 8
0x17
0:000> $$>a< eval.txt 0n16 + 0n16
0x20
0:000> $$>a< eval.txt 0x10 + 0x10
0x20
0:000> $$>a< eval.txt 0x10 * 0x10
0x100
0:000> $$>a< eval.txt 0n10 * 0n10
0x64
0:000> $$>a< eval.txt 5 << 3
0x28
0:000> $$>a< eval.txt 5 >> 3
0x0
0:000> $$>a< eval.txt f >> 3
0x1
0:000> $$>a< eval.txt 0y101 + 0y111
0xc
0:000> $$>a< eval.txt 0y101 % 0y111
0x5
0:000> $$>a< eval.txt 0y111 % 2
0x1
0:000> $$>a< eval.txt 0y111 % 4
0x3
0:000> $$>a< eval.txt 0y111 % 0n10
0x7
0:000> $$>a< eval.txt 0y111 / 0n10
0x0
0:000> $$>a< eval.txt 0n2 / 0n10
0x0
0:000> $$>a< eval.txt @@c++(@$teb->ProcessEnvironmentBlock) + 18
0x7ffd6018
0:000> $$>a< eval.txt 5 & 1
0x1
0:000> $$>a< eval.txt 5 & 2
0x0
0:000> $$>a< eval.txt 5 & 3
0x1
0:000> $$>a< eval.txt 5 & 4
0x4
0:000> $$>a< eval.txt 5 & 5
0x5
0:000> $$>a< eval.txt @esp & @esp
0x12f9a4
0:000> $$>a< eval.txt 3 | 4
0x7
0:000> $$>a< eval.txt poi(@esp+c) + 0
0x7ffd6000
0:000> $$>a< eval.txt poi(@esp+c) + @ecx
0x80105988
0:000> $$>a< eval.txt @ecx + 0
0x12f988
0:000> $$>a< eval.txt calc + 3c
0x1d003c
0:000> $$>a< eval.txt poi(calc+3c) + calc 
0x1d00d8
0:000>$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>aa>3
0x0
0:000>$$>a>3
0x1
0:000>$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>aProcessEnvironmentBlock)+18
0x7ffd6018
0:000>$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>a$$>a
请您解释一下分号的用法好吗?msdn docs about using alias有一个解释,我在一个链接中编辑了这个解释,并引用了相关部分。请看一看
0:000> $$>a< eval.txt 5 + 5
0xa
0:000> $$>a< eval.txt f + f
0x1e
0:000> $$>a< eval.txt f + 8
0x17
0:000> $$>a< eval.txt 0n16 + 0n16
0x20
0:000> $$>a< eval.txt 0x10 + 0x10
0x20
0:000> $$>a< eval.txt 0x10 * 0x10
0x100
0:000> $$>a< eval.txt 0n10 * 0n10
0x64
0:000> $$>a< eval.txt 5 << 3
0x28
0:000> $$>a< eval.txt 5 >> 3
0x0
0:000> $$>a< eval.txt f >> 3
0x1
0:000> $$>a< eval.txt 0y101 + 0y111
0xc
0:000> $$>a< eval.txt 0y101 % 0y111
0x5
0:000> $$>a< eval.txt 0y111 % 2
0x1
0:000> $$>a< eval.txt 0y111 % 4
0x3
0:000> $$>a< eval.txt 0y111 % 0n10
0x7
0:000> $$>a< eval.txt 0y111 / 0n10
0x0
0:000> $$>a< eval.txt 0n2 / 0n10
0x0
0:000> $$>a< eval.txt @@c++(@$teb->ProcessEnvironmentBlock) + 18
0x7ffd6018
0:000> $$>a< eval.txt 5 & 1
0x1
0:000> $$>a< eval.txt 5 & 2
0x0
0:000> $$>a< eval.txt 5 & 3
0x1
0:000> $$>a< eval.txt 5 & 4
0x4
0:000> $$>a< eval.txt 5 & 5
0x5
0:000> $$>a< eval.txt @esp & @esp
0x12f9a4
0:000> $$>a< eval.txt 3 | 4
0x7
0:000> $$>a< eval.txt poi(@esp+c) + 0
0x7ffd6000
0:000> $$>a< eval.txt poi(@esp+c) + @ecx
0x80105988
0:000> $$>a< eval.txt @ecx + 0
0x12f988
0:000> $$>a< eval.txt calc + 3c
0x1d003c
0:000> $$>a< eval.txt poi(calc+3c) + calc 
0x1d00d8