!DumpArray
命令没有像!DumpHeap
这样的 -short 标记。现在,我有一个对象数组,即一组地址。如何使用.foreach
(或任何其他方式)迭代所有这些?
我可以将数组视为非托管对象 - 找出布局并进入存储64位地址的连续内存部分。但我真的希望有更好的方法。
答案 0 :(得分:0)
我最终注意到64位指针的托管数组的项目从偏移量0x10开始。
因此,迭代项目的代码将是:
.foreach /pS1 /ps1 (x {dq /c1 <The Array Address>+0x10 L<Count>}){.echo x }
&lt;数组地址&gt; 是数组地址,&lt; Count&gt; 是要访问的数组项的数量。
就我而言,我实际上处理的是List<T>
个对象。它包含偏移量为8的数组引用(_items)和偏移量为0x18(_size)的项目数
因此,给定X List<T>
对象的地址,其中T是64位系统中的引用类型,我们可以像这样迭代列表中的项:
r @$t0 = wo(X+0x18)
.foreach /pS1 /ps1 (x {dq /c1 poi(X+8)+0x10 L@$t0}){.echo x }