Получить метод Таблица структуры - PullRequest
0 голосов
/ 04 октября 2018

У меня есть метод, который принимает struct и class.Я могу использовать !DumpObj, чтобы получить адрес таблицы методов, и их !DumpMT, чтобы увидеть ее свойства.

0:000> !CLRStack -a
OS Thread Id: 0x23c0 (0)
        Child SP               IP Call Site
0000000000f5e8c0 00007ff9ff0a0616 ValueAndReferenceTypes.Program.Print(ValueAndReferenceTypes.MyStruct, ValueAndReferenceTypes.MyClass) [C:\SampleFiles\DotNet\ValueAndReference.cs @ 51]
    PARAMETERS:
        myStruct (0x0000000000f5e930) = 0x0000000d00000003
        myClass (0x0000000000f5e938) = 0x00000000032152f0

0000000000f5e930 00007ff9ff0a0566 ValueAndReferenceTypes.Program.Main(System.String[]) [C:\SampleFiles\DotNet\ValueAndReference.cs @ 46]
    PARAMETERS:
        args (0x0000000000f5e9a0) = 0x0000000003212c18
    LOCALS:
        0x0000000000f5e97c = 0x0000000000000003
        0x0000000000f5e978 = 0x000000000000000d
        0x0000000000f5e970 = 0x0000000d00000003
        0x0000000000f5e958 = 0x00000000032152f0
        0x0000000000f5e968 = 0x0000000d00000003

0000000000f5ebd0 00007ffa5e696bb3 [GCFrame: 0000000000f5ebd0] 
0:000> !DumpObj /d 00000000032152f0
Name:        ValueAndReferenceTypes.MyClass
MethodTable: 00007ff9fef95b90
EEClass:     00007ff9ff122100
Size:        24(0x18) bytes
File:        C:\SampleFiles\DotNet\ValueAndReference_x64.exe
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffa56c191c8  4000003        8         System.Int32  1 instance                3 A
00007ffa56c191c8  4000004        c         System.Int32  1 instance               13 B
0:000> !DumpMT /d 00007ffa56c191c8
EEClass:         00007ffa565c45f8
Module:          00007ffa564f1000
Name:            System.Int32
mdToken:         00000000020000fb
File:            C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
BaseSize:        0x18
ComponentSize:   0x0
Slots in VTable: 56
Number of IFaces in IFaceMap: 5

Как мне сделать то же самое для struct?!DumpObj терпит неудачу, потому что это не объект.Я считаю, что мне следует использовать !DumpVC, но единственный способ узнать адрес таблицы методов - это команда !DumpObj.

...