繁体   English   中英

与位置无关的代码和vtable

[英]Position-independent code and vtable

虚拟函数如何在与位置无关的代码中实现?

我知道如果我的类有虚函数,编译器通常会为它生成一个包含所有虚函数地址的vtable,并在我的类的每个对象中存储一个指向vtable的指针。

现在,如果我的代码与位置无关,则编译器无法知道虚函数的地址(或任何函数)。 那它是做什么的?

我想知道真正的编译器是做什么的(不是理论上可行的); 我最感兴趣的是Linux 32位平台,但其他平台也有点有趣。

有两种选择:

  1. 接受你的vtable不会与位置无关,并尝试将其从代码部分移开,以便所有需要动态链接fixup的代码彼此相邻,以减少不可共享页面的数量。 gcc这样做
  2. 在vtable中使用相对跳跃。 我不知道有任何实现这样做,并且它只有在vtable与方法实现固定偏移时才有效,并且这些在加载时不能被覆盖(它们可以在典型的ELF系统上)。

我建议您编写一些示例程序并使用例如IDA Pro自行检查。 下载免费版演示版

基本上,vtable无处不在实现为函数指针表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM