如何通过脚本从Windbg中获取C++属性的地址

How to get the adress of a C++ attribute from Windbg by script

本文关键字:C++ 属性 地址 获取 何通过 脚本 Windbg      更新时间:2023-10-16

如何使用脚本文件获取Windbg中实例的属性地址?

属性意外更改,无法从中看到值从Visual Studio 2010调试器更改,并且在内存地址中使用断点没有帮助,因为在调用类的析构函数后我无法取消设置断点。发生错误的对象的特定实例也未修复。

这是一个用户空间应用程序。

如果我理解你是正确的,你需要在C++类实例的地址+偏移量。只要有问题的类没有被实例化很多次,这是可能的。

1) 初始化属性后,在构造函数中创建一个普通的bp break。

bp Foo:Foo+<xxx>

您必须计算出属性的偏移量,请在此处检查。

此时您必须弄清楚哪个寄存器保存这个指针。

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同样,ypu必须找到一个直接或间接保存this指针的寄存器。类似于:

bc[poi(@ebp-0x08)]

我已经做到了,只要程序实例化太多,断点不会用完,它就可以工作。

注意:语法可能不是100%正确,距离上次已经有一段时间了。