“vtable fixup”是什么意思?意思是?

发布于 2024-08-20 21:10:17 字数 71 浏览 9 评论 0 原文

我听说过这个术语“vtable fixup”。这是什么意思?我问谷歌没有成功。我已经知道什么是 vtable,所以不需要定义它。

I have heard this term, "vtable fixup", used. What does it mean? I had no success asking Google. I already know what a vtable is so that does not need to be defined.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慢慢从新开始 2024-08-27 21:10:17

对我来说,Google 透露,vtable 修复是 PE (Windows) 可执行文件格式的一项特殊功能。根据 ECMA 的 PE 规范

某些语言,选择不这样做
遵循通用类型系统运行时
模型,可能具有虚函数
需要用一个表示
v表。这些v表被布置
由编译器而不是运行时。
找到正确的 v 表插槽并
通过值间接调用
保存在该插槽中也是由
编译器。 VtableFixups 字段位于
运行时标头包含
数组的位置和大小
Vtable 修复(参见第 14.5.1 节)。
V 型表应发射到
PE 文件的读写部分。

该数组中的每个条目描述一个
连续的 v 表槽数组
指定的尺寸。每个槽位开始
out 初始化为元数据标记
他们需要的方法的价值
称呼。在图像加载时,运行时
加载器会将每个条目变成
指向CPU机器码的指针
并且可以直接调用。

For me, Google revealed that vtable fixups are a special feature of the PE (Windows) executable file format. They provide an efficient way of implementing vtables (for C++ and other languages), according to ECMA's PE spec:

Certain languages, which choose not to
follow the common type system runtime
model, may have virtual functions
which need to be represented in a
v-table. These v-tables are laid out
by the compiler, not by the runtime.
Finding the correct v-table slot and
calling indirectly through the value
held in that slot is also done by the
compiler. The VtableFixups field in
the runtime header contains the
location and size of an array of
Vtable Fixups (see clause 14.5.1).
V-tables shall be emitted into a
read-write section of the PE file.

Each entry in this array describes a
contiguous array of v-table slots of
the specified size. Each slot starts
out initialized to the metadata token
value for the method they need to
call. At image load time, the runtime
Loader will turn each entry into a
pointer to machine code for the CPU
and can be called directly.

苄①跕圉湢 2024-08-27 21:10:17

简单的答案:这是一种允许不同编译器/语言生成的代码共存的黑客行为。它允许运行时在不知道实现细节的情况下找到虚拟函数的位置。

The simple answer: It's a hack to allow code generated by different compilers / languages to coexist. It allows the runtime to find the locations of virtual functions without knowing the details of the implementation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文