[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
maomaolk 编译器为了防止你在析构函数中调用虚表中的函数, 实际上在析构函数中调用虚表中的函数时,它不会生成调用虚函数的汇编代码, 而是会生成E8call. 你可以写代码验证下。
KevinsBobo 在析构中为虚表再次赋值是因为要考虑有继承关系的析构中调用虚函数,有继承的类析构顺序是:子类析构->父类析构......因此在执行析构时需要将虚表指针指向对应的子类或父类的虚表
maomaolk 实际上这个问题从逆向的角度来说您也不用太纠结, 因为它就是在析构的时候又为虚表赋了一次值而已,我们多了一次找到虚表的机会。 我个人认为可能编译器觉得假如虚表指针指向别处了呢?或者是我们自己写代码将虚表 ...