首页 > 其他分享 >迷失的this指针

迷失的this指针

时间:2023-03-04 10:46:41浏览次数:39  
标签:查看 esp 寻址 迷失 ecx esi 指针

在调试客户崩溃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的变化情况。

 

标签:查看,esp,寻址,迷失,ecx,esi,指针
From: https://www.cnblogs.com/yilang/p/17048527.html

相关文章

  • C/C++ 数据结构优先级队列的实现(使用二级指针)
    #include<iostream>#include<Windows.h>#include<iomanip>//优先级队列的实现usingnamespacestd;#defineMaxSize5typedefintDataType;//队列中的元素类型......
  • 填充每个节点的下一个右侧节点的指针
    填充每个节点的下一个右侧节点的指针给定一个二叉树:structNode{intval;Node*left;Node*right;Node*next;}填充它的每个next指针,让这个指针指向其下一个右......
  • 指针和数组笔试题解析
    在大多数情况下,数组名就是数组首元素的地址,但是有两种特殊情况:一、sizeof(数组名):当数组名单独放在sizeof内部,指的是整个数组二、&数组名:取的是整个数组的地址,但是结果和首......
  • C++智能指针详解(共享指针,唯一指针,自动指针)
    前言:智能指针在C++11中引入,分为三类:shared_ptr:共享指针unique_ptr:唯一指针auto_ptr:自动指针一、共享指针几个共享指针可以指向同一个对象;每当shared_ptr的最后一个所有者......
  • 3.3 C提高 指针 字符串
    扩展1.指针变量和它指向的内存块是两个不同的概念指针(本身也有东西)~内容点击查看代码注意//写内存时,一定要确保内存可写 char*buf2="sadgkdsjlgjlsdk";//文......
  • 指针与数组、多级指针
    指针和数组:数组名: 【数组名是地址常量】---不可以被赋值。 ++/--/+=/-=/%=//=(带有副作用的运算符) 指针是变量。可以用数组名给指针赋值。++--......
  • 使用qsort函数实现冒泡排序(函数指针的运用)
    //此程序的本质:完全理解qsort函数的传参的原则////实现思路:因为我们是模拟qsort函数//所以我们要自己创造一个:比较数据的函数:cmp_int//因此必须有一个函数指针来接收这......
  • Sword 指针的最后一位一定是0
    /*指针的最后一位一定是0*/#include<stdio.h>#include<stdlib.h>#include<string.h>/*网上有文章说"无论是32位还是64位机器,其地址的最后一位肯定是0(利用......
  • openfoam 智能指针探索
    前言今天看到一个程序,用到了智能指针,virtualtmp<volScalarField>rho()const;借此机会把有关智能指针的知识体系重新梳理一遍智能指针autoPtr的由来:首先要说明智......
  • 数组指针
    数组指针:本质是指针变量,保存的是数组的首地址例如:int(*p)[5]=NULL;数组首元素地址。例如:intarr[3]={10,20,30};  arr就是首元素地址(&arr[0]==arr),a......