gpt4 book ai didi

.net - 如何使用 WinDbg 在托管核心转储中找到 N 个最大的字符串?

转载 作者:行者123 更新时间:2023-12-02 01:10:45 26 4
gpt4 key购买 nike

我有一个包含 26GB 字符串的转储 - 超过 350 万个字符串。大对象堆只有 18 个,占用略多于 2.5MB - 使用 !sosex.dumpgen 命令检查。

第 2 代拥有其中的大部分。除了将它们全部放入日志文件然后在 WinDbg 之外对其进行分析外,我怎样才能获得最大的 N?

最佳答案

我认为 Netext 是可能的, 但它只接近于 SOSEx 的 !strings,所以它需要更多的脚本

0:000> .load F:\...\netext\2.0.1.5580\x86\NetExt.dll
NetExt version 2.0.1.5580 Aug 3 2015
License and usage can be seen here: !whelp license
Check Latest version: !wupdate
For help, type !whelp (or in WinDBG run: '.browse !whelp')
Questions and Feedback: http://netext.codeplex.com/discussions
Copyright (c) 2014-2015 Rodney Viana (http://blogs.msdn.com/b/rodneyviana)
Type: !windex -tree or ~*e!wstack to get started

0:000> !windex
Starting indexing at 20:55:54
Indexing finished at 20:55:54
30,707 Bytes in 343 Objects
Index took 00:00:00

0:000> !wfrom /nofield /type System.String where (m_stringLength>50) select m_stringLength
0n100
0n137
0n130
0n100
...

要去掉 0n 前缀,我们使用 $substr(m_stringLength,2,100)

这样我们就可以大致了解字符串的长度。这个列表需要一些排序,所以让我们使用 .shell 和 DOS sort/R 命令:

!! -ci "!wfrom /nospace /nofield /type System.String where (m_stringLength>50) select $substr(m_stringLength,2,100)" sort /R

根据结果,让我们使用循环并跳过一些项目来获取前 N 个项目。将 0n2 替换为您想要的项目数减 1。

.foreach /pS 0n2 /ps 999999 (length {!! -ci "!wfrom /nospace /nofield /type System.String where (m_stringLength>50) select $substr(m_stringLength,2,100)" sort /R}) {.echo length}

现在我们知道了前 N 个字符串的最小长度,我们可以再次将其应用于原始的 !wfrom 命令。

嘿,这不是很容易吗?输出到文本文件有时是一个很好的解决方案...

关于.net - 如何使用 WinDbg 在托管核心转储中找到 N 个最大的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com