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

!sosex.strings を使用します。このコマンドを使用すると、すべての文字列の値を表示したり、サイズ、内容、または GC 生成によってそれらをフィルタリングしたりできます。

于 2012-08-02T15:06:03.640 に答える
1

私の考えは、スタックのアドレス間で文字列オブジェクトの参照を探すことです。たとえば、スタック ボトム アドレス (0x000000001821CEF0) とスタック トップ アドレス (000000001821E3F0) がわかっています。この範囲内のすべてのアドレスをループして (8 バイト単位で)、オブジェクトの詳細を出力できます。

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