我在弄清楚如何使用带有 SOS 的 WinDBG 访问静态 .NET 类成员的地址时遇到了麻烦。给定一个这样的输入程序:
namespace windg_static_test
{
class StaticTest
{
public static bool static_bool_field = true;
public void show_and_set()
{
while (static_bool_field)
{
Console.WriteLine("static_bool_field = " + static_bool_field + "\nEnter new value: ");
static_bool_field = Console.ReadLine()[0] == '0' ? false : true;
}
}
}
class Program
{
static void Main(string[] args)
{
StaticTest st = new StaticTest();
st.show_and_set();
}
}
}
我可以使用 !name2ee 找到 EEClass,我可以使用 !dumpclass w/name2ee 值查看这些值。
0:004> !dumpclass 1c12e0
Class Name: windg_static_test.StaticTest
mdToken: 02000002
File: C:\Develop\Projects\windg static test\bin\Release\windg static test.exe
Parent Class: 64f84920
Module: 001c2e94
Method Table: 001c3844
Vtable Slots: 4
Total Method Slots: 6
Class Attributes: 100000
Transparency: Critical
NumInstanceFields: 0
NumStaticFields: 1
MT Field Offset Type VT Attr Value Name
65377208 4000001 1f System.Boolean 1 static 1 static_bool_field
但我似乎无法弄清楚如何获取值实际存储的地址。一般是怎么做的?
谢谢,
埃格林
最佳答案
SOS 不显示该字段的地址。请改用 !sosex.mdt。
!sosex.mdt windbg_static_test.StaticTest。
关于.net - 使用 SOS 在 WinDbg 中查找静态字段的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13016553/