迷失的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   活着的虫子  阅读(97)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2020-03-04 记一次CLR exception(e0434352)---System.IO.FileNotFoundException的排查
2020-03-04 从WER已经抓取的进程中获取良好的小型转储
2020-03-04 关于System.IO.FileNotFoundException异常
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示