3

如何在当前线程的 clrstack 上打印所有 System.String 对象的字符串值?

我想做的伪代码:

foreach ($string in !dso -type System.String) !do $string

或者更好

foreach ($string in !dso -type System.String) !printstring $string

甚至更好

foreach (distinct $string in !dso -type System.String) !printstring $string

谢谢!

4

3 回答 3

3

最新的 SOSEX 扩展 (v4) 具有!mdso类型过滤选项的命令/t

SOSEX - Copyright 2007-2012 by Steve Johnson - http://www.stevestechspot.com/
To report bugs or offer feedback about SOSEX, please email sjjohnson@pobox.com

mdso
Usage: !sosex.mdso [Options]

Dumps object references on the stack and in CPU registers in the current context

Options:

/t:typeFilter - Limits the output to objects whose type name matches the filter expression specified by "typeFilter".
                 Cannot be combined with the /mt option.

所以一个命令!mdso /t:System.String应该工作。

于 2012-08-02T20:28:05.303 回答
1

我的想法是在堆栈地址中查找字符串对象引用。例如,我们知道栈底地址(0x000000001821CEF0)和栈顶地址(000000001821E3F0)。我们可以遍历此范围内的所有地址(带 8 字节步长)并输出对象详细信息。

.for (r $t0=0x000000001821CEF0;@$t0<000000001821E3F0;r $t0=@$t0+0x8){ !do poi(@$t0) }
于 2012-08-02T14:38:20.277 回答
1

使用!sosex.strings。此命令将允许您查看所有字符串的值,或按大小、内容或 GC 生成过滤它们。

于 2012-08-02T15:06:03.640 回答