如何通过脚本从Windbg中获取C++属性的地址
How to get the adress of a C++ attribute from Windbg by script
如何使用脚本文件获取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%正确,距离上次已经有一段时间了。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- C++ 命名参数习惯用语 - 未设置字符串属性
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?