更改本地堆栈变量值
|
使用Windbg / SOS,可以更改堆栈上的局部变量的值吗?如果可以,怎么办?
没有找到相关结果
已邀请:
1 个回复
弛保矮瘦敖
假设我们在
上设置一个断点并运行直到命中断点,堆栈看起来像这样:
注意,本地
被列为,但是它没有告诉我们哪个寄存器。我们可以查看寄存器并找到值为2的寄存器,但可能不止一个。相反,让我们看一下该方法的JIT编译代码。
查看代码,我们看到唯一的
指令使用了
寄存器,因此我们的值存储在此处,然后进行计算。不幸的是,
此时未保持正确的值,但向后看,我们发现
。即该值最初存储在“ 9”中。 要更改
的值,请使用
命令。例如。将该值设置为0x15,请执行以下操作:
该方法的输出现在是: 答案是42 请记住,上面的示例只是许多可能的情况之一。根据调试/发布版本以及32/64位,对本地的处理方式有所不同。同样,对于复杂的方法,跟踪值的确切位置可能会有些困难。 要更改实例的状态,您必须在堆栈上定位引用(例如,使用
或
)。一旦找到,就可以使用偏移量来查找存储数据的存储器,并使用
命令根据需要更改值。让我知道您是否也想要一个示例。