gpt4 book ai didi

asp.net - 遍历 !DumpHeap 输出以读取内存偏移量处的值

转载 作者:行者123 更新时间:2023-12-01 10:44:08 28 4
gpt4 key购买 nike

我正在尝试提出一个 WinDbg 命令行表达式,它获取 !DumpHeap 命令的输出,并为每个地址从偏移量 0x08< 读取一个 64 位值 地址后。我认为这是可能的(不确定),但到目前为止我所做的每一次尝试都因一些错误而失败。

我搜索了很多,但大多数 WinDbg 文章都显示了简单的示例,我可以尝试这些示例,但我的尝试失败了。

我有一个 ASP.NET 工作进程的进程转储。该过程有一些内存增长但没有明显的违规者所以我试图列出一些在内存中出现多次的对象。我将 sos.dll 用于托管调试 WinDbg 扩展。

这是我想做的

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(myaddress+0x8);!do @$t0;.echo ************* myaddress}

注意,上面的命令必须在一行上 - 我在这里只添加了一个换行符以提高可读性。

对于上面的行,WinDbg 打印此错误:Couldn't resolve error at 'myaddress+0x8);!do @$t0;.echo ************* 00000001003cb870 '.

我正在尝试遍历 !DumpHeap 返回的所有地址 - 每个地址都应该进入 myaddress 变量。然后,对于每个地址,我尝试将 $t0 用户寄存器设置为从 myaddress+0x8 读取的值。 !do (!DumpObject) 命令随后会将对象转储到该地址。

如果我只运行(再次,在 WinDbg 中的一行):

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{!do myaddress;.echo ************* myaddress}

我得到了一个对象转储列表,但这比我需要的高一级。我想更深入地钻取一个级别并转储我正在迭代的这些顶级对象的特定成员。

这是可能的还是我走错了路?

最佳答案

进一步搜索后,我发现我使用了错误的语法。根据questionMSDN , 变量名必须用空格包围或者必须包含在 ${...} 中才能工作。在我使用 ${} 附件后,我的脚本开始工作。

为了将来引用,以下是运行脚本的方法(在 WinDbg 中将其保持在一行):

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(${myaddress}+0x8);!do @$t0;.echo ************* myaddress}

关于asp.net - 遍历 !DumpHeap 输出以读取内存偏移量处的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28102678/

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