【问题标题】:windbg .net debug command .foreach, how to use /ps and /pS?windbg .net 调试命令.foreach,如何使用/ps 和/pS?
【发布时间】:2013-08-06 23:13:16
【问题描述】:

我阅读了 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?

【问题讨论】:

  • 在文章评论区提出这个问题。她仍然积极写博客,可能会回复你。

标签: debugging foreach windbg ps


【解决方案1】:

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

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

/pS InitialSkipNumber

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

/ps SkipNumber

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多