我在 Windbg 中有以下 System.Net.IPAddress 对象,并希望将 m_address (4294967295 m_Address) 字段转换为相应的点分四进制表示法。我怎样才能做到这一点?我看到 m_ToString 的值为 00000000。该字符串是如何获得的?
Name: System.Net.IPAddress
MethodTable: 71c3d860
EEClass: 71a299f0
Size: 40(0x28) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Fields:
MT Field Offset Type VT Attr Value Name
727e821c 40018b1 4 System.Int64 1 instance 4294967295 m_Address
727f2248 40018b2 14 System.String 0 instance 00000000 m_ToString
71c42030 40018b6 1c System.Int32 1 instance 2 m_Family
727e1994 40018b7 18 System.UInt16[] 0 instance 022c20a8 m_Numbers
727e821c 40018b8 c System.Int64 1 instance 0 m_ScopeId
727f3aa4 40018b9 20 System.Int32 1 instance 0 m_HashCode
71c3d860 40018ad 7ec System.Net.IPAddress 0 static 022c1ff8 Any
71c3d860 40018ae 7f0 System.Net.IPAddress 0 static 022c203c Loopback
71c3d860 40018af 7f4 System.Net.IPAddress 0 static 022c2080 Broadcast
71c3d860 40018b0 7f8 System.Net.IPAddress 0 static 022c2080 None
71c3d860 40018b3 7fc System.Net.IPAddress 0 static 022c20c4 IPv6Any
71c3d860 40018b4 800 System.Net.IPAddress 0 static 022c2108 IPv6Loopback
71c3d860 40018b5 804 System.Net.IPAddress 0 static 022c214c IPv6None
所以似乎在断点处 m_Address 字段没有地址。执行 UdpClient.Receive 方法后。我得到以下内容。
0:000> !DumpObj /d 024a20f8
Name: System.Net.IPAddress
MethodTable: 71c3d860
EEClass: 71a299f0
Size: 40(0x28) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Fields:
MT Field Offset Type VT Attr Value Name
727e821c 40018b1 4 System.Int64 1 instance 100731402 m_Address
727f2248 40018b2 14 System.String 0 instance 024a2198 m_ToString
71c42030 40018b6 1c System.Int32 1 instance 2 m_Family
727e1994 40018b7 18 System.UInt16[] 0 instance 024a2120 m_Numbers
727e821c 40018b8 c System.Int64 1 instance 0 m_ScopeId
727f3aa4 40018b9 20 System.Int32 1 instance 0 m_HashCode
71c3d860 40018ad 7ec System.Net.IPAddress 0 static 022c1ff8 Any
71c3d860 40018ae 7f0 System.Net.IPAddress 0 static 022c203c Loopback
71c3d860 40018af 7f4 System.Net.IPAddress 0 static 022c2080 Broadcast
71c3d860 40018b0 7f8 System.Net.IPAddress 0 static 022c2080 None
71c3d860 40018b3 7fc System.Net.IPAddress 0 static 022c20c4 IPv6Any
71c3d860 40018b4 800 System.Net.IPAddress 0 static 022c2108 IPv6Loopback
71c3d860 40018b5 804 System.Net.IPAddress 0 static 022c214c IPv6None
0:000> !DumpObj /d 024a2198
Name: System.String
MethodTable: 727f2248
EEClass: 72423444
Size: 32(0x20) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String: 10.10.1.6
Fields:
MT Field Offset Type VT Attr Value Name
727f3aa4 40000aa 4 System.Int32 1 instance 9 m_stringLength
727f2c40 40000ab 8 System.Char 1 instance 31 m_firstChar
727f2248 40000ac c System.String 0 shared static Empty
但问题仍然是将 Int64 转换为 IP 地址的数学公式是什么?