如何在Windbg中编写这样的循环?

Geo*_*ge2 5 loops windbg

我有一个名为Foo的类型,它有一个名为length的字段.我想在Windbg中编写一个循环语句,它将在托管堆中转储类型为Foo的所有对象实例的长度字段?

乔治,提前谢谢

wom*_*omp 3

这是一个我尚未测试过的脚本,但可能对您有用。我基于 Tess 的脚本来转储 ASP.net 堆上的所有会话变量。

r @$t0=0;

$$ Loop to get all foo's
.foreach (CurrentFoo {!dumpheap -type George.George2.Foo -short}){
    $$ Increment # of Foo's
    r @$t0 = @$t0+1

    .printf "Length:\t%d\n", poi(${CurrentFoo}+0xc);
}
.printf "Number of Foo's: %d\n\n\n\n\n\n\n\n\n", @$t0;
Run Code Online (Sandbox Code Playgroud)

这一问题的技巧是计算 length 属性相对于主 Foo 引用的偏移字节数,并用正确的偏移字节数替换 printf 行中的“0xc”。

您应该能够通过在其中一个 Foo 上执行 !dumpobject 并查看它的结构来完成此操作。

希望有帮助。