IDA 反汇编的虚函数表(VFT,也称为虚方法表,VMT)的开头是这样的:
_ZTV13QSystemLocale DCD 0, _ZTI13QSystemLocale, _ZN13QSystemLocaleD2Ev+1, _ZN13QSystemLocaleD0Ev+1
并将其c++filt
解码为
vtable for QSystemLocale DCD 0, typeinfo for QSystemLocale, QSystemLocale::~QSystemLocale()+1, QSystemLocale::~QSystemLocale()+1
在这里我们看到_ZN13QSystemLocaleD2Ev
和_ZN13QSystemLocaleD0Ev
,都由c++filt
to转换QSystemLocale::~QSystemLocale()
。
(+1 是正常的,该位在 ARM 上选择正确的指令集)。
Qt 源代码声明:
virtual ~QSystemLocale();
为什么有两个虚拟析构函数?
(我使用 ARM、Android NDK(gcc/g++)、C++、Qt)。