与位置无关的代码和 vtable
虚拟函数如何在与位置无关的代码中实现?
我知道,如果我的类有虚函数,编译器通常会为其生成一个 vtable,其中包含所有虚函数的地址,并在我的类的每个对象中存储指向该 vtable 的指针。
现在,如果我的代码与位置无关,则编译器无法知道虚拟函数(或任何函数)的地址。那么它有什么作用呢?
我想知道真正的编译器会做什么(而不是理论上可能的);我主要对 linux 32 位平台感兴趣,但其他平台也有点有趣。
How are virtual functions implemented in position-independent code?
I know that if my class has virtual functions, the compiler usually generates a vtable for it that contains addresses of all virtual functions, and stores a pointer to the vtable in each object of my class.
Now, if my code is position-independent, the compiler cannot know addresses of virtual functions (or any function, for that matter). So what does it do?
I would like to know what real compilers do (not what is theoretically possible); i am mostly interested in linux 32-bit platforms but other platforms are slightly interesting too.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有两种选择:
There are two options:
基本上,vtable 在任何地方都被实现为函数指针表。
Basically, a vtable is everywhere implemented as a table of function pointers.
我建议您编写一些示例程序并使用 IDA Pro 等程序自行检查。下载免费软件版本或演示版。
I suggest that you write some example programs and examine them yourself with for example IDA Pro. Download the freeware version or demo version.