您所在的位置: 首页>>读书频道>>安全>>综合>>

C.4.6 识别继承对象的构造函数

http://book.51cto.com  2008-04-23 15:54  美]Eldad Eilam 著/韩琪等译  电子工业出版社博文试点  我要评论(0)
  • 摘要:《Reversing:逆向工程揭密》描述的是在逆向与反逆向之间展开的一场旷日持久的拉锯战。这里是附录C破译程序数据。本节讲的是识别继承对象的构造函数。
  • 标签:继承  代码  函数  Reversing:逆向工程揭密

C.4.6  识别继承对象的构造函数

对于继承对象,它的构造函数(constructors)很有趣,因为它会对虚拟函数表指针进行初始化!如果你看一下两个构造函数(一个是继承类构造函数,另一个是该继承类的基类的构造函数),你会发现两者都会初始化对象的虚拟函数表(尽管对象只存放了一个虚拟函数表指针)。每个构造函数初始化指向它自己的虚拟函数表的虚拟函数表指针。这是因为构造函数不实例化的到底是哪种对象类型——是继承类的对象还是基类的对象。下面是一个简单的继承类构造函数的代码。

 

注意这个构造函数是怎样调用基类的构造函数的。这就是C++中对象的初始化方法。要调用初始化对象。调用对应类的构造函数来初始化对象,如果这个对象是继承类对象,编译器会把其父类的构造函数加在子类构造函数代码之前。在每一层父类的构造函数中都会执行这一过程,直到调用到基类的构造函数为止。下面是一个基类构造函数例子。

 

要注意的是:基类的构造函数将虚拟函数指针指向自己的拷贝,然后在返回后马上就被继承类的构造函数替换掉了。还要指出的是这个函数没有调用任何其他的构造函数,因为它是基类的构造函数。如果你跟踪整个类的构造函数调用链(即每个类的构造函数都调用其父类的构造函数),你就会知道这里已经调用基类的构造函数了,因为这个构造函数没有再调用其他任何一个构造函数,它只是初始化了虚拟函数表然后返回的。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   
让你的代码“炫”起来——WPF开发教程
深入Vista应用程序开发
Ruby on Rails 社区网站开发
ASP.NET从入门到精通
Java完全自学宝典
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有