熟悉C++类的内存结构,及相关布局,是逆向分析其它软件模块的基本功。作者主要从事插件开发,向没有这块知识的读者讲解这块内容。如果读者不熟悉C++继承,多继承和虚函数的基本概念,可以先学习一下相关内容。
每个有虚函数的类或者虚继承的子类,编译器都会为它生成一个虚表。如果是单继承,子类就只有一个虚指针指向一个虚表,如果是多继承,子类就会依照内存顺序排列,存在多个虚指针指向多个虚表。虚函数的存在,导致的结果就是编译器在构造类的内存结构的时候,会在类生成的对象指针的第一个成员变量为虚表指针。函数的形式,如下所示:
#include
class Foo