迷失的this指针

在调试客户崩溃dmp文件时,已经恢复了异常栈,需要查看当前的对象,但是this指针如下

 

很明显,这个值不对,ecx指针的值被修改做它用了。没关系,可以查看函数汇编,看看this指针保存在哪儿了,一般是栈上,找到这个地址就可以了,于是

 由上图可知,ecx显示给了esi,esi又放到栈上esp+14h处,这就简单了,只要查看esp+14h的值就行了(这也是导致我后面浪费了很多时间的开始),于是:

 

很明显,this指针不对,通过其他途径,我获得this的值为0xd30c7f58,那为什么不对呢,最后,我忽然醒悟,这里用的是esp来寻址的,以往我们见得多的是用ebp来寻址栈空间,这两者的差别就是,在某个函数栈内,epb是不变的,而esp的值随时可能会变化。明白了这一点,就好办了,还是查看汇编,

所以,this指针的存储地址是esp+0x14+8:

 这就对了,所以,以后我们在分析的时候,要看函数的寻址用的是esp的话,一定要注意esp会变化,要观察问题附件的上下文,看看esp的变化情况。

 

posted on 2023-03-04 10:26  活着的虫子  阅读(78)  评论(0编辑  收藏  举报

导航