如何打印变量并从windbg脚本中的if语句中使用它?

时间:2016-08-08 14:56:28

标签: windbg

1,关于如何打印变量,我在windbg脚本中使用了以下句子,但是无法打印它。

 r @$t0 = 123;
   .printf  @$t0

2,如何在句子中使用变量,但是我仍然发现它失败了。

 r @$t0 = 123;
 .if(@$t0 ==123)
{
.printf  @$t0
}

如何修改它们?

2 个答案:

答案 0 :(得分:1)

我认为你使用伪寄存器的方式并不错,但是:

1).printf()采用格式字符串,就像在C

中一样

2)默认情况下,数字是十六进制而不是十进制,使用0n或0x来明确提及它们的基数

3)从历史上看,你不应该使用' @'使用' r'来设置伪寄存器,虽然我相信现在它可以以任何方式工作

r $t0 = 0n123;
.if ( @$t0 == 0n123 )
{ 
 .printf "%d", @$t0 
}

答案 1 :(得分:1)

$ windbg脚本中三角形数字的总和

r eax=0;r $t0=0;.while(@$t0<10){r eax=@eax+@$t0;.printf "%2d=%3d\n",@$t0,@eax;r $t0=@$t0+1}

结果

 0=  0
 1=  1
 2=  3
 3=  6
 4= 10
 5= 15
 6= 21
 7= 28
 8= 36
 9= 45
10= 55
11= 66
12= 78
13= 91
14=105
15=120

让我们确认f(n) = n * (n+1) /2

 ? 0n15 * (0n16/2)
Evaluate expression: 120 = 00000078