我在弄清楚如何使用带有 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/

10-11 18:25