如何使用脚本文件获取Windbg中实例属性的地址?
属性意外更改,并且无法从那里看到值从Visual Studio 2010调试器更改并使用断点om内存地址doe snot帮助,因为我无法在析构函数之后取消设置断点上课被称为。发生错误的对象的特定实例也不固定。
这是一个用户空间应用程序。
答案 0 :(得分:1)
如果我理解你是正确的,你需要设置一个ba(Break on Access) 地址+ C ++类实例的偏移量。 只要问题类没有多次实例化,这是可能的。
1)在初始化属性后,在构造函数中创建一个普通的bp break。
bp Foo:Foo+<xxx>
您必须弄清楚属性的偏移量,检查here。
此时您必须确定哪个寄存器包含此指针。
2)然后修改1)中断以设置额外的ba(Break on Access)
然后必须将中断地址计算为此+偏移量。 指定ID很重要,因为我们必须删除析构函数
中的break应该是这样的:
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 同样,ypu必须找到一个直接或间接保存this指针的寄存器。 类似的东西:
bc[poi(@ebp-0x08)]
我已经完成了这项工作,只要程序实例化得太多就没有断点,它就可以正常工作。
注意:语法可能不是100%正确,这是自上次以来的一段时间。