吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1654|回复: 7
收起左侧

[求助] 怎么获取虚函数表的大小?

[复制链接]
Pammer 发表于 2020-6-21 08:33
如题,怎么获得虚函数表的大小?
[C++] 纯文本查看 复制代码
class Test
{
	virtual a() {}
};

int main()
{
	Test a;
}

这个在x86下是4字节,但是在x64下就变成了8字节(sizeof(void*)=8)
有没有比直接数virtual个数乘以sizeof(void*)更简单的方法?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

52c 发表于 2020-6-21 09:34
正常  32 4   64  8  有问题吗???
 楼主| Pammer 发表于 2020-6-21 09:44
52c 发表于 2020-6-21 09:34
正常  32 4   64  8  有问题吗???

如果改动了Test这个类的话,必须得把别的代码里面的虚函数表大小都给改了,有什么直接获得的方法吗?
callmemabey 发表于 2020-6-21 10:30
虚函数表的大小与虚函数的个数没有关系吧,只是一个指针的大小,所以在32位下位4,在64位下位8
Eaglecad 发表于 2020-6-21 10:47
虚函数表,会随着虚函数个数增加而增加,n*4或者n*8是最好的
 楼主| Pammer 发表于 2020-6-21 10:49
callmemabey 发表于 2020-6-21 10:30
虚函数表的大小与虚函数的个数没有关系吧,只是一个指针的大小,所以在32位下位4,在64位下位8

有虚函数的类前4字节是一个指针,指向虚函数表,里面有所有的虚函数的函数指针,32位下如果有两个虚函数的话,虚表长度是8(4*2=8),但是如果改动了这个类里面的虚函数个数的话,得改很多参数,有什么方法可以直接获取的吗?我就是想说这个意思
庸人误我 发表于 2020-6-21 11:08
不是类的成员只是多一个指向虚函数表的指针吗?
cube 发表于 2020-6-22 13:11
环境:
vs2013 debugx32
win10 x64

[C++] 纯文本查看 复制代码
	Test a;
	int *vt = (int*)*(int*)&a;
	int n = 0;
	do{
		vt += n++;
	} while (*vt != 0);
	cout << n << endl;
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-15 20:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表