WinDbg的 - 我如何转储匹配给定过滤器字符串(Windbg - How can I Dump

2019-09-22 07:50发布

人们可以使用以下命令转储全部串!dumpheap型System.string

如何可以转储或者只打印那些开始或包含特定的“串”串

例。 我只是intrested查看其中包含“/我的/应用/请求”的字符串

Answer 1:

使用sosex而不是SOS这一点。 它有一个!strings命令,它允许您使用过滤字符串/m:<filter>选项。



Answer 2:

使用!sosex.strings。 看!sosex.help的选项,基于内容和/或长度过滤字符串。



Answer 3:

不知道!dumpheap支持。 您可以随时使用.logopen将输出重定向到一个文件和处理后的那个。 对于更优雅(并因此更复杂的)的解决方案,还可以使用.shell到命令输出到外壳进程重定向用于解析。 下面是一个例子:

http://blogs.msdn.com/b/baleixo/archive/2008/09/06/using-shell-to-search-text.aspx

您还可以看到更多细节.shell文档:

http://msdn.microsoft.com/en-us/library/windows/hardware/ff565339(v=vs.85).aspx



Answer 4:

如果你真的想要去没有SOSEX,然后再试

.foreach (string {!dumpheap -short -type System.String}) { .foreach (search {s -u ${string}+c ${string}+c+2*poi(${string}+8) "mySearchTerm"}) { du /c80 ${string}+c }}

它用

  • !dumpheap得到的.NET堆的所有字符串
  • .foreach遍历他们
  • s到搜索字符串
  • 再次.foreach找出如果作者发现的东西
  • 一些偏移计算得到的第一个字符(+ c)该串和串长度(8)(乘以2得到的字节而不是字符)。 那些需要适应在64个应用程序的情况下,

该/ C80只是为了更好的输出。 你也可以使用!do ${string}代替du /c80 ${string}+c ,如果你喜欢字符串的.NET细节。



文章来源: Windbg - How can I Dump Strings which match a given filter
标签: windbg sos