如何更改托管变量的值?

时间:2015-11-26 10:32:03

标签: variables windbg managed editing

我的布尔变量可以使用语法

引用
MPrime.exe Spirit.MPrimeComServerManager._isComServerReady

我尝试使用语法

?? MPrime.exe Spirit.MPrimeComServerManager._isComServerReady=1 

我不确定如何将e*命令用于托管代码。

这是!DumpObj的输出:

00007fff81a6d6e8  4000198   169   System.Boolean  1   static   0 _isComServerReady

1 个答案:

答案 0 :(得分:3)

让我们编写这个示例程序,看看Booleans如何在.NET中工作以及如何使用WinDbg更改值:

using System;

namespace ChangeValueOfBoolean
{
    class Program
    {
        static void Main()
        {
            var h = new BooleanHolder();
            h.BoolValue = true;
            Console.WriteLine("Debug now. Boolean member has the value {0}", h.BoolValue);
            Console.ReadLine();
            Console.WriteLine("After debugging, boolean member has the value {0}", h.BoolValue);
            h.BoolValue = true;
            Console.ReadLine();
        }
    }

    class BooleanHolder
    {
        public bool BoolValue { get; set; }
    }
}

调试步骤:

  1. 以调试模式编译
  2. 运行该应用程序。
  3. 附上WinDbg
  4. 修复符号.symfix;.reload
  5. 加载.NET扩展程序.loadby sos clr
  6. 找到相关对象!dumpheap -short -type BooleanHolder
  7. 转储对象!do <address>
  8. 将原始值转储到内存dd <address>+<offset> L1

    我们会看到true == 1

  9. 修改原始值ed <address>+<offset> 0
  10. 继续执行该计划g
  11. 查看控制台上的输出
  12. Enter

    已切换为false

  13. 在WinDbg中完成演练:

    0:004> .symfix;.reload
    Reloading current modules
    ..........................
    0:004> .loadby sos clr
    0:004> !dumpheap -short -type BooleanHolder
    025330c8
    0:004> !do 025330c8
    Name:        ChangeValueOfBoolean.BooleanHolder
    MethodTable: 00144d74
    EEClass:     00141804
    Size:        12(0xc) bytes
    File:        E:\Projekte\SVN\HelloWorlds\ChangeValueOfBoolean\bin\Debug\ChangeValueOfBoolean.exe
    Fields:
          MT    Field   Offset                 Type VT     Attr    Value Name
    704bf3d8  4000001        4       System.Boolean  1 instance        1 <BoolValue>k__BackingField
    0:004> dd 025330c8+4 L1
    025330cc  00000001
    0:004> ed 025330c8+4 0
    0:004> g
    

    enter image description here