C++ 位置独立代码和vtable
如何在位置无关的代码中实现虚拟函数 我知道,如果我的类有虚拟函数,编译器通常会为它生成一个vtable,其中包含所有虚拟函数的地址,并在类的每个对象中存储指向vtable的指针 现在,如果我的代码是位置独立的,编译器就不能知道虚拟函数(或者任何函数)的地址。那么它有什么作用呢C++ 位置独立代码和vtable,c++,gcc,dynamic-linking,virtual-functions,vtable,C++,Gcc,Dynamic Linking,Virtual Functions,Vtable,如何在位置无关的代码中实现虚拟函数 我知道,如果我的类有虚拟函数,编译器通常会为它生成一个vtable,其中包含所有虚拟函数的地址,并在类的每个对象中存储指向vtable的指针 现在,如果我的代码是位置独立的,编译器就不能知道虚拟函数(或者任何函数)的地址。那么它有什么作用呢 我想知道真正的编译器做什么(而不是理论上可能的);我最感兴趣的是linux 32位平台,但其他平台也有点感兴趣。我建议您编写一些示例程序,并使用例如IDA Pro亲自检查它们。下载或。基本上,vtable是作为函数指针表实
我想知道真正的编译器做什么(而不是理论上可能的);我最感兴趣的是linux 32位平台,但其他平台也有点感兴趣。我建议您编写一些示例程序,并使用例如IDA Pro亲自检查它们。下载或。基本上,vtable是作为函数指针表实现的 有两种选择:
链接器知道,只要偏移量不跨越模块边界,就不会有问题。找到一个真正做到这一点的人将是一个更困难的问题。