文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C++学习笔记3(类在内存中的结构)

C++学习笔记3(类在内存中的结构)

时间:2011-04-03  来源:Joen

如果需要逆向C++的代码, 首先应该明白各个类是怎么布局的, 当然首先要确定你所逆向的代码是C++写的, 这个就比较简单了, 一般C++写的代码都大量的使用了this指针, 有的时候会觉得非常古怪的代码, 比如mov ecx, esi call ***** 这种代码, 一般只有在C++里面才有.. 由上面这个代码就可以确定. 其在 调用构造函数, 并且是无参数那个. 还是看看一个这个比较有营养的东西,这个程序有点长, 我定义了好几种类型的对象, 一个一个试验, 看看到底是什么款式...首先看看源代码, 我编译是在Vs2008下 编译的, 命令行是cl /c /EHsc xxx.cpp 没有加其他特性..

#include <iostream>
/*
这个程序基本C++一些特性都给用上了, 我们看看这个程序在内存中到底是什么样的
*/

using namespace std;

class CPerson {
private:
int m_data;
public:
CPerson():m_data(
0) {
cout
<< "CPerson Constructor" << endl;
}
virtual void Out() {
cout
<< "CPerson-->Out" << endl;
}

void Out2() {
cout
<< "CPerson-> Out2" << endl;
}
~CPerson() {
cout
<< "CPerson Destructor" << endl;
}
};


class CVampire: public CPerson {
private:
int m_data;
public:
CVampire():m_data(
0) {
cout
<< "CVampire Constructor" << endl;
}
void Out() {
cout
<< "CVampire" << endl;
}

void Out2() {
cout
<< "CVampire Out2" << endl;
}
~CVampire() {
cout
<< "CVamprie Destructor" << endl;
}
};

class CGhost: public CPerson {
private:
int m_data;
public:
CGhost(): m_data(
0){
cout
<< "CGhost Constructor " << endl;
}
void Out() {
cout
<< "CGhost" << endl;
}

~CGhost() {
cout
<< "CGhost Destructor" << endl;
}
};

//这个多重继承比较郁闷啊, CVampire本来就是从CPerson继承的, 自己又去继承
//呵呵这里演示看看到底什么效果
class CLivingDead:public CPerson, CVampire {

private:
int m_data;
public:
CLivingDead(
int i, int j ){
this->m_data = i;
cout
<< "CLivingDead Constructor" << endl;
}

~CLivingDead(){
cout
<< "CLivingDead Destructor" << endl;
}
};

int main() {

CPerson
* cp = new CVampire(); //在堆上分配
CGhost cg;

CPerson
* cp2 = &cg; //基类引用指向子类对象

cp
->Out();
cp2
->Out();

CVampire cv;
//栈上定义一个对象
cv.Out2();

CLivingDead cl(
10, 20 ); //栈上定义一个对象
CPerson* cl2 = new CLivingDead( 100, 200 );

cp2
= &cl;
cp2
->Out();
cp2
->Out2();

cl2
->Out();
cl2
->Out2();

delete cp;
delete cl2;
return 0;
}

对照着源码来看看反汇编是什么情况..

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载