gpt4 book ai didi

.net - 如何在 WinDBG 中查看 char 数组中元素的值?

转载 作者:行者123 更新时间:2023-12-01 15:35:31 25 4
gpt4 key购买 nike

第一个命令向我展示了网络进程的内存转储中的数组元素。当我尝试使用第二个命令查看索引 0 处每个元素中存储的实际字符时,它失败了。例如,如果数组包含“f”、“o”、“o”作为前三个字符,我想要一个在屏幕上显示“f”的命令。

0:000> !da -length 3 0000000001f11af8 
Name: System.Char[]
MethodTable: 000007fef77e9688
EEClass: 000007fef73eef58
Size: 74(0x4a) bytes
Array: Rank 1, Number of elements 25, Type Char
Element Methodtable: 000007fef77e97d8
[0] 0000000001f11b08
[1] 0000000001f11b0a
[2] 0000000001f11b0c

0:000> !do 0000000001f11b08
<Note: this object has an invalid CLASS field>
Invalid object

最佳答案

sos.dumpobj用于转储托管对象,或更具体地说是(直接或间接)从 System.Object 扩展的对象。 char(或 System.Char)是一种值类型,它从 System.ValueType 而不是 System.Object 扩展而来。

要转储值类型,您可以使用命令 !sos.dumpvc <MT> <address> .上面给出的 MT(方法表)为 000007fef77e97d8,因此要转储每个值,您可以执行以下操作:

!sos.dumpvc 000007fef77e97d8 0000000001f11b08
!sos.dumpvc 000007fef77e97d8 0000000001f11b0a
!sos.dumpvc 000007fef77e97d8 0000000001f11b0c

这将导致如下内容:

Name: System.Char
MethodTable 000007fef77e97d8
EEClass: 000007feea37f018
Size: 24(0x18) bytes
(C:\Windows\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
000007fef77e97d8 400021e 0 System.Char 1 instance 66 m_value

值 66 是 'f' 的十六进制值。另请注意 VT 列。这表明这是一个值类型。

一个更聪明的选择是 sosex.mdt .如果你没有SOSEX,你可以得到它here .在众多选项中,-e 参数将集合类型(例如数组)扩展指定的级别。您可以将其用作 sosex.mdt -e:1 <address> .本例中的地址是数组的地址,即 0000000001f11af8。输出看起来像这样:

!sosex.mdt -e:1 0000000001f11af8
0000000001f11af8(System.Char[], Elements: 3)
[0] 'f'
[1] 'o'
[2] 'o'

关于.net - 如何在 WinDBG 中查看 char 数组中元素的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254922/

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