迷失的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的变化情况。
为虫子生,为虫子死,为虫子奋斗一辈子