一般在PE的已初始化的数据区: .rdata 虚表类似在编译的内部定义, 比如定义一个全局变量 int g_xxxx[12] = {1,2...}; 在实际引用的时候只需要这个对象的指针就可以了具体的可以用先关工具跟踪分析, 比如 IDA, OD
多谢楼上2位的回复,大体的意思我理解。有这方面的介绍文档吗 可能不同语言、不同编译器有差别。就拿c++来说,一般比如我有: class a { virtual void t(){} };可能就会有类似".?a@@"这样的一些存储的信息。这些是调试看到的。如果有文档或是什么就好了。为什么这块的我一点相关的资料都没找到。有的都是大家讨论的东西。
虚表类似在编译的内部定义, 比如定义一个全局变量
int g_xxxx[12] = {1,2...};
在实际引用的时候只需要这个对象的指针就可以了具体的可以用先关工具跟踪分析, 比如 IDA, OD
可能不同语言、不同编译器有差别。就拿c++来说,一般比如我有:
class a
{
virtual void t(){}
};可能就会有类似".?a@@"这样的一些存储的信息。这些是调试看到的。如果有文档或是什么就好了。为什么这块的我一点相关的资料都没找到。有的都是大家讨论的东西。
VS下有个undname.exe可以得到原始名称。
gcc应该也有类似的工具,没找过,不确定
虚指针是类的成员变量,叫someclass::vfptr.
编译器在类的构造函数体之前插入一句vfptr=vftable即可.
这些事对编译器来说很简单.虚继承那才叫复杂.
顺便说一句,基类有虚函数,派生类又增加了虚函数,这时派生类仍旧只有一个虚指针.派生类自己的虚函数放在基类的虚表后面.