1

我阅读了 Tess 的关于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?

4

1 回答 1

4

意思是“跳过接下来的/ps 9999 个令牌,然后取下一个,然后跳过接下来的 99 个,等等”。这里的 99 恰好是任意的。她只想拿一个令牌,但没有办法用.foreach命令做到这一点。她选择了一个任意高的数字来有效地告诉它“跳过其余的标记”。

/ps和之间的区别/pS可以在WinDbg帮助文件中找到:

/pS InitialSkipNumber

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

/ps 跳过编号

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

于 2013-08-06T15:13:16.683 回答