如何使用脚本文件在Windbg中获取实例属性的地址?
一个属性意外地发生了变化,无法从Visual Studio 2010调试器中看到该值是如何改变的,并且在内存地址上设置断点后不能取消断点,因为类的析构函数被调用后无法取消。出现错误的特定对象实例也不固定。
这是一个用户空间应用程序。
如何使用脚本文件在Windbg中获取实例属性的地址?
一个属性意外地发生了变化,无法从Visual Studio 2010调试器中看到该值是如何改变的,并且在内存地址上设置断点后不能取消断点,因为类的析构函数被调用后无法取消。出现错误的特定对象实例也不固定。
这是一个用户空间应用程序。
bp Foo:Foo+<xxx>
你必须找出属性的偏移量,请查看这里。
你必须找出此时保持this指针的寄存器。
2)然后修改1)中断,设置一个额外的ba(访问时中断)。
断点地址必须计算为this + 偏移量。重要的是要指定ID,因为我们必须在析构函数中删除中断。
应该是这样的:
bp <module>!Foo:Foo+<xxx> “ba[@eax] w4 @eax+4;gc ”
From hlp:
[~Thread] ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]
3) 在析构函数中设置代码断点(bp),并删除上面的ba。 您必须再次找到一个直接或间接保存this指针的寄存器。 类似于:
bc[poi(@ebp-0x08)]