-
-
[原创]探究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");
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!