windbg .net debug命令.foreach,如何使用/ ps和/ pS?

时间:2013-06-28 06:27:12

标签: debugging foreach windbg ps

我阅读了苔丝关于dump the asp.net request的博客,我读了代码, 我想知道为什么.foreach命令需要在博客的代码中进行如此多的“/ ps 99”切换。

例如代码:

$$ RETURNCODE = CONTEXT->RESPONSE->_STATUSCODE ((CONTEXT+0X14)+50)
$$ ---------------------------------------------------------------------------------- 
    .foreach /pS 2 /ps 99 (token {?poi(poi(${hc}+0x14)+50)}){
        .printf "${token}\t\t"
    };

此代码在.net 2上,我自己做了一些测试.net 4,

RETURNCODE = CONTEXT-> RESPONSE-> _STATUSCODE((CONTEXT + 0X28)+ b0),偏移量在.net4上更改。

0:000> ? poi(0x00000000ffc59a58+0x28)+0xb0
Evaluate expression: 4291217184 = 00000000`ffc6c720
0:000> ? poi(poi(0x000000011fa2b948+0x28)+0xb0)
Evaluate expression: 200 = 00000000`000000c8

.foreach

  • / pS 2 - >意味着跳过最初的2,所以前两个'Evaluate expression:'将跳过。

  • / ps 99 - >但为什么这里需要99?

1 个答案:

答案 0 :(得分:2)

/ps 99表示“跳过下一个99个令牌,然后选择下一个,然后跳过下一个99,等等”。 99这里碰巧是任意的。她只想使用一个令牌,但使用.foreach命令无法做到这一点。她选择了一个任意高的数字来有效地告诉它“跳过剩下的代币”。

/ps/pS之间的差异可以在WinDbg帮助文件中找到:

  

/ pS InitialSkipNumber

     

导致跳过一些初始标记。 InitialSkipNumber 指定不会传递给指定 OutCommands 的输出令牌数。

     

/ ps SkipNumber

     

每次处理命令时都会重复跳过令牌。每次将令牌传递到指定的 OutCommands 后,将忽略等于 SkipNumber 值的许多令牌。