本文主要是介绍WinDBG技巧:this指针的常见误区 (ECX寄存器存放this指针),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用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技巧:this指针的常见误区 (ECX寄存器存放this指针)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!