使用Windbg转储阵列
在C#中,有一个对象称为使用Windbg转储阵列,windbg,crash-dumps,sos,Windbg,Crash Dumps,Sos,在C#中,有一个对象称为Shape,它有两个字段area和length 我得到了一个形状列表,它是形状的集合 我的崩溃转储中有一个shapeList地址 我需要一个windbg脚本,它在shapeList数组中遍历每个项,并为每个形状单独显示区域的值。.for(r$t1=0;@$t1.for(r$t1=0;@$t1
Shape
,它有两个字段area
和length
我得到了一个形状列表
,它是形状的集合
我的崩溃转储中有一个shapeList
地址
我需要一个windbg脚本,它在shapeList数组中遍历每个项,并为每个形状单独显示区域的值。.for(r$t1=0;@$t1<[length]*[element size];r$t1=@$t1+[element size];){!dopoi(poi(@$t1+poi([list的地址]+0x8)+0x18)+[parent object中子对象的偏移量)}
.for ( r $t1 = 0; @$t1 < [length] * [element size]; r $t1 = @$t1 + [element size];) {!do poi(poi(@$t1+poi([address of list]+0x8)+0x18)+[offset of child object in parent object) }
For example:
class Foo
{
public Bar MyBar { get; set; }
}
class Bar
{
public String MyString { get; set; }
}
0:000> .for ( r $t1 = 0; @$t1 < 0x5 * 0x8; r $t1 = @$t1 + 0x8;) {!do poi(poi(@$t1+poi(0000000002362e40+0x8)+0x18)+0x8) }
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 00000000023653b0 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 0000000002365468 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 0000000002365520 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 00000000023655d8 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 0000000002365690 <MyString>k__BackingField
例如:
福班
{
公共栏MyBar{get;set;}
}
分类栏
{
公共字符串MyString{get;set;}
}
0:000>.for(r$t1=0;@$t1<0x5*0x8;r$t1=@$t1+0x8;){!执行poi(poi(@$t1+poi(000000000 2362E40+0x8)+0x18)+0x8)}
名称:testdebug.Bar
方法表:000007fe95eb3928
EEClass:000007fe95fc22d8
大小:24(0x18)字节
文件:C:\users\testdebug.exe
领域:
MT字段偏移类型VT属性值名称
000007fef47b4130 4000002 8系统。字符串0实例000000000 23653B0 k__BackingField
名称:testdebug.Bar
方法表:000007fe95eb3928
EEClass:000007fe95fc22d8
大小:24(0x18)字节
文件:C:\users\testdebug.exe
领域:
MT字段偏移类型VT属性值名称
000007fef47b4130 4000002 8系统。字符串0实例000000000 2365468 k___BackingField
名称:testdebug.Bar
方法表:000007fe95eb3928
EEClass:000007fe95fc22d8
大小:24(0x18)字节
文件:C:\users\testdebug.exe
领域:
MT字段偏移类型VT属性值名称
000007fef47b4130 4000002 8系统。字符串0实例000000000 2365520 k__BackingField
名称:testdebug.Bar
方法表:000007fe95eb3928
EEClass:000007fe95fc22d8
大小:24(0x18)字节
文件:C:\users\testdebug.exe
领域:
MT字段偏移类型VT属性值名称
000007fef47b4130 4000002 8系统。字符串0实例000000000 23655D8 k__BackingField
名称:testdebug.Bar
方法表:000007fe95eb3928
EEClass:000007fe95fc22d8
大小:24(0x18)字节
文件:C:\users\testdebug.exe
领域:
MT字段偏移类型VT属性值名称
000007fef47b4130 4000002 8系统。字符串0实例000000000 2365690 k___BackingField
您看过安装附带的windbg文档了吗?在.chm文件中有一些非常好的脚本说明。元素大小和长度之间有什么区别?如何在父对象中找到子对象的偏移量?元素大小是列表中元素的大小,因此如果它是引用类型(与类类似),它是8字节(如果是32位,则为4字节)。长度是数组的大小(即列表对象上的大小)。