首页
社区
课程
招聘
[原创]探究C++之一:类
发表于: 2016-1-13 17:26 4202

[原创]探究C++之一:类

2016-1-13 17:26
4202

      逆向探究c++之类
一:前言

  自己总结的学习的三个过程:
  1:知道怎么用
  2:知道为什么这么用
  3:想怎么用就怎么用
  本文探究的知识比较基础,大神请飘过。  

二:正文
1:起因
     在工作中分析一个进程退出时的崩溃dump时,调查原因发现是子类在调用虚函数时父类已经被释放引起的崩溃,虽然已经解决了此问题,但因此起了对类的继承虚表等特性的探究的想法。

2:探究
    首先构建了三个类 TestClass:public FatherTwo :public Fatherone,然后通过od和ida对类的析构和类的结构进行了一些探究。

      Class :FathOne(父类)FatherTwo(父类)TestClass(子类)

#ifndef _CLASS_FATHERONE_
#define _CLASS_FATHERONE_

class FatherOne
{
public:
    FatherOne();
    ~FatherOne();

public:

    virtual void TestVirFunOne();

private:

    int iOne;
};
#endif  // _CLASS_FATHERONE_
#include "stdafx.h"
#include "fatherOne.h"
#include <stdio.h>

FatherOne::FatherOne():
        iOne(0)
{
    printf("FatherOne Init\n");
}

FatherOne::~FatherOne()
{
    printf("FatherOne unInit\n");
}

//virtual function
void FatherOne::TestVirFunOne()
{
    iOne = 1;
    printf("Virtual Function From One\n");
}

#ifndef _CLASS_FATHERTWO_
#define _CLASS_FATHERTWO_

#include "fatherOne.h"

class FatherTwo :
    public FatherOne
{
public:
    FatherTwo();
    ~FatherTwo();

public:

    virtual void TestVirFunTwo();

private:

    int iTwo;
};

#endif
  
#include "stdafx.h"
#include "fatherTwo.h"
#include <stdio.h>

FatherTwo::FatherTwo():
        iTwo(0)
{
    printf("FatherTwo Init\n");
}

FatherTwo::~FatherTwo()
{
    printf("FatherTwo UnInit\n");
}

// virtual function
void FatherTwo::TestVirFunTwo()
{
    iTwo = 1;
    printf("Virtual Function From Two\n");
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 1392
活跃值: (5212)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
想听一下 什么时候会出现 子类析构的时候,父类被释放了?
2016-1-13 17:39
0
雪    币: 274
活跃值: (30)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
非子类析构。
进程退出时,UI在多线程退出时发生崩溃
2016-1-13 17:58
0
游客
登录 | 注册 方可回帖
返回
//