Как определить тип массива?

У меня есть OutOfMemoryException, и я хотел бы проанализировать размер и тип массива, который будет создан.

Я создал демонстрационный дамп для этой ситуации, и я могу получить следующую информацию:

0:000> !pe
Exception object: 023f389c
Exception type: System.OutOfMemoryException
Message: <none>
InnerException: <none>
StackTrace (generated):
    SP       IP       Function
    0015EE44 0099007F OOM2!OOM2.Program.Main()+0xf

StackTraceString: <none>
HResult: 8007000e

0:000> !u 0099007F 
Normal JIT generated code
OOM2.Program.Main()
Begin 00990070, size 22
00990070 baffffff7f      mov     edx,7FFFFFFFh
00990075 b90241a478      mov     ecx,offset mscorlib_ni+0x4102 (78a44102)
0099007a e8192194ff      call    002d2198 (JitHelp: CORINFO_HELP_NEWARR_1_VC)
>>> 0099007f 8bc8            mov     ecx,eax
...

Итак, я вижу, что создан новый массив размером 7FFFFFFF, что составляет 2 миллиарда элементов. (Пожалуйста, игнорируйте тот факт, что вы не можете даже создать байт [] такого размера в 32-разрядном приложении .NET, поэтому в этом примере тип, вероятно, не будет иметь никакого значения.)

Я сейчас прочитал, что тип массива находится в регистре ECX, но, к сожалению,mscorlib_ni+0x4102 (78a44102) не очень полезно

я пытался!mln, !mdt и даже нереально!ip2mt, но ни один из них не отображает ожидаемыйbyte или жеbyte[] выход. Есть ли способ получить тип из этого нативного образа mscorlib?

Ответы на вопрос(1)

Ваш ответ на вопрос