WinDBG技巧:this指针的常见误区 (ECX寄存器存放this指针)
2017-09-07 21:38
323 查看
用Windbg 调试Win32程序的时候我们经常会输入命令 dt -b this 来查看类的成员变量值。
Windbg 默认会用寄存器ECX 里面的值作为this 指针地址,然后打印出类里面的所有成员变量。 其实这样是有时候是错误的。虽然this指针多数时候都会被存在寄存器ECX, 有些C++编译器在做代码优化之后会把 this指针放在其他寄存器里面,比如ESI。 所以在调试的时候还需要读一下汇编代码来确定this 在哪个寄存器里面。比如我们看到 MOV EAX, dword ptr [ESI + 0x48h],就可以判断ESI 是this 指针。
如果在ESI,可以用以下命令来打印:
?? (MyClass*)@ESI
就可以了。
Windbg 默认会用寄存器ECX 里面的值作为this 指针地址,然后打印出类里面的所有成员变量。 其实这样是有时候是错误的。虽然this指针多数时候都会被存在寄存器ECX, 有些C++编译器在做代码优化之后会把 this指针放在其他寄存器里面,比如ESI。 所以在调试的时候还需要读一下汇编代码来确定this 在哪个寄存器里面。比如我们看到 MOV EAX, dword ptr [ESI + 0x48h],就可以判断ESI 是this 指针。
如果在ESI,可以用以下命令来打印:
?? (MyClass*)@ESI
就可以了。
相关文章推荐
- WinDBG技巧:this指针的常见误区 (ECX寄存器存放this指针)
- WinDBG技巧:this指针的常见误区 (ECX寄存器存放this指针)
- WinDBG技巧:this指针的常见误区 (ECX寄存器存放this指针)
- C++ 最常见的显示使用this 指针场景
- 【转载】测试基础培训-测试方法运用、技巧与常见误区
- C++11智能指针的常见误区 Top10
- 感知this指针 人工传递this指针技巧
- Windbg 的this指针陷阱
- javascript this 指针的使用及常见问题
- C++中this指针存放在哪里
- Windbg技巧: 利用C++类对象的虚拟函数表指针在内存中搜索对象
- MySQL语句优化常见误区和优化技巧
- thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
- 总结常见电脑技巧大全
- symbian阶段总结与常见技巧
- 与指针相关的常见错误
- c++之this指针做参数实现对象间的交互实例
- Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值
- 【常见问题】Can not perform this action after onSaveInstanceState
- Cpp_this指针与常函数