gpt4 book ai didi

c# - WinDbg .foreach 通过引用类型获取字段值

转载 作者:太空狗 更新时间:2023-10-30 00:51:42 24 4
gpt4 key购买 nike

我如何遍历引用类型(例如 MyClass)并获取其中一个字段(值类型)的值

我使用下一个代码。

.foreach (address  {!DumpHeap -type MyClass -short }) {!do ${address} (what I do next?) }

我得到了对象的转储,但是如何获取所有对象的字段值?

最佳答案

首先,您需要通过转储单个对象来找出各个字段的偏移量:

0:016> !do 00000000115bff60 
Name: System.Action
MethodTable: 000007fedb35ff30
EEClass: 000007fedb111f90
Size: 64(0x40) bytes
(C:\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll)
Fields:
MT Field Offset Type VT Attr Value Name
000007fedc267680 40000ff 8 System.Object 0 instance 00000000115bff60 _target
000007fedc266138 4000100 10 ...ection.MethodBase 0 instance 0000000000000000 _methodBase
000007fedc26a798 4000101 18 System.IntPtr 1 instance 7fedf0bf238 _methodPtr
000007fedc26a798 4000102 20 System.IntPtr 1 instance 7fedf0fa850 _methodPtrAux
000007fedc267680 400010c 28 System.Object 0 instance 0000000000000000 _invocationList
000007fedc26a798 400010d 30 System.IntPtr 1 instance 0 _invocationCount

接下来您可以在循环中使用偏移量。请注意,我更改了 -type <ClassName>-mt <MethodTable>以免发生冲突。 !do按可能包含您不期望的对象的子字符串搜索。

根据字段的类型,您可以使用 d* ${address}+<offset> [L<length>]转储值类型

0:016> .foreach (address  {!DumpHeap -mt 000007fedb35ff30 -short }) {dp ${address}+0x20 L1}
00000000`114cfc48 00000000`114ce518
...

!do poi(${address}+<offset>)转储 .NET 对象

0:016> .foreach (address  {!DumpHeap -mt 000007fedb35ff30 -short }) {!do poi(${address}+0x8)}
Name: PaintDotNet.Controls.UnitsComboBoxStrip
MethodTable: 000007fed94cd120
EEClass: 000007fed91b38f8
Size: 224(0xe0) bytes
(C:\Program Files\Paint.NET\PaintDotNet.exe)
Fields:
MT Field Offset Type VT Attr Value Name
000007fedc267680 400018a 8 System.Object 0 instance 0000000000000000 __identity
000007fedb6cd320 40008e0 10 ...ponentModel.ISite 0 instance 0000000000000000 site
000007fedb6fcc18 40008e1 18 ....EventHandlerList 0 instance 00000000114d0050 events
...

关于c# - WinDbg .foreach 通过引用类型获取字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586706/

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