.echo 5 + 5在WinDBG中显示“5 + 5”。可以让它显示10吗?

时间:2017-08-31 19:23:35

标签: 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,以便它显示表达式的结果而不是表达式文本?

2 个答案:

答案 0 :(得分:2)

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

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

修改using alias

  

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

;aS /x temp  ${$arg1} ${$arg2} ${$arg3}
.block
{
    .echo ${temp}
}
ad *

并像这样使用

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

答案 1 :(得分:1)

.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