我阅读了苔丝关于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?
答案 0 :(得分:2)
/ps 99
表示“跳过下一个99个令牌,然后选择下一个,然后跳过下一个99,等等”。 99这里碰巧是任意的。她只想使用一个令牌,但使用.foreach
命令无法做到这一点。她选择了一个任意高的数字来有效地告诉它“跳过剩下的代币”。
/ps
和/pS
之间的差异可以在WinDbg帮助文件中找到:
/ pS InitialSkipNumber
导致跳过一些初始标记。 InitialSkipNumber 指定不会传递给指定 OutCommands 的输出令牌数。
/ ps SkipNumber
每次处理命令时都会重复跳过令牌。每次将令牌传递到指定的 OutCommands 后,将忽略等于 SkipNumber 值的许多令牌。