首页
社区
课程
招聘
[求助]调试老手们, 一个局部对象调用一个接口类的方法后, 自己this被破坏.
发表于: 2011-5-14 02:27 4040

[求助]调试老手们, 一个局部对象调用一个接口类的方法后, 自己this被破坏.

2011-5-14 02:27
4040
详细内容: WinXP + VC6.0平台 C++代码.

首先 class A 是一个接口类, 放在一个DLL中, 用DLL中的函数创建返回 class A* 指针使用.
class A
{
    ...
    virtual int Func3(const unsigned char*, int, unsigned char, const char) = 0;
    ...
}

class Rand 是一个本地类.
{
    ...
    class A* m_pA;
    ...
};

麻烦如下:

定义一个局部变量(堆栈) Rand R, 在 R 的一个成员函数中在其中使用了 m_pA->Fun3();

结果 m_pA->Fun3() 返回后, R 的 this 指针被破坏了, 注意是 R 的 this 不是 m_pA 的.

我把 R 的 this 指针加入内存断点监视, 地址为 0X0013E57C, 可在 m_pA->Fun3() 运行中, 0X0013E57C指向的内存都没任何变化.

可一返回 R 的 this 指针和其指向的数据成员就全变了, 部分数据成员: CXX0030:Error: expression cannot be evaluated (表达式不能被评估)

我觉得 0X0013E57C 应该就是堆栈中的 R, 实在不知道 R 究竟在内存那里, 谁能告诉我为什么.

总不可能在 m_pA->Fun3() 这函数中监视包含它的 R 的 this 指针, 所以我实在没办法了.

(在DLL中的其它 A 的方法都运行正常)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人能直到一下, 该怎么做吗?
2011-5-14 22:45
0
雪    币: 362
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
查找下写数组越界、内存溢出
2011-5-15 10:40
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
一般都是内存访问越界了 或者 进了那函数跑飞了乱访问内存然后运气好又飞回来了。。-0-
2011-5-15 17:52
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很多问题比如栈溢出、栈不平衡、寄存器被改写之类的看源代码调试很难看明白,不如看着反汇编代码调试一下。
2011-5-16 19:34
0
雪    币: 466
活跃值: (165)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
6
lou shang zheng jie .can kao wo de wen zhang :  OllyDbg 2.01有了更好的源码调试功能 http://www.labfan.com/2011/03/30/debug_exe_with_ollydbg-2-01/
2011-5-16 20:26
0
游客
登录 | 注册 方可回帖
返回
//