gpt4 book ai didi

c++ - 是否可以访问实现的 vtbl?

转载 作者:行者123 更新时间:2023-11-28 02:25:45 25 4
gpt4 key购买 nike

我正在阅读 Scott Myerses C++,他说通常当我们将成员函数设为虚拟时,我们的类除了其成员之外还会包含一个指向所谓的 vtable 的指针。那么,是否有可能以某种方式访问​​此指针?我理解它的实现细节,但尽管如此,也许我们可以用 g++ 或 clang 来完成。

最佳答案

探索这一点的另一种简单方法是使用 http://gcc.godbolt.org - 它允许您输入程序并查看 GCC 生成的 x86 程序集(或者,尝试使用您自己的编译器的 -S/S (VC++))。我把这个程序放在:

struct X
{
virtual ~X() { }
virtual void f() { }
};

int main()
{
X x;
}

点击“Directives”,vtable信息显示如下...

.LFE5:
.size main, .-main
.weak vtable for X
.section .rodata._ZTV1X,"aG",@progbits,vtable for X,comdat
.align 32
.type vtable for X, @object
.size vtable for X, 40
vtable for X:
.quad 0
.quad typeinfo for X
.quad X::~X()
.quad X::~X()
.quad X::f()
.weak typeinfo name for X
.section .rodata._ZTS1X,"aG",@progbits,typeinfo name for X,comdat
.type typeinfo name for X, @object
.size typeinfo name for X, 3
typeinfo name for X:
.string "1X"
.weak typeinfo for X
.section .rodata._ZTI1X,"aG",@progbits,typeinfo for X,comdat
.align 16
.type typeinfo for X, @object
.size typeinfo for X, 16
typeinfo for X:
.quad vtable for __cxxabiv1::__class_type_info+16
.quad typeinfo name for X
.text

关于c++ - 是否可以访问实现的 vtbl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30723039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com