C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 从V-table调用虚函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因为C中的所有虚函数都存储在V表中.在虚函数的情况下发生重叠.
我想问一下,我们可以通过哪种方式直接从表中调用函数,并且能够确定V-table包含哪些函数.

解决方法

嗯,实际上你可以.我不关心可移植性,但在VS中你可以做到.
假设我们使用VS构建32位代码,对象地址的前4个字节是vtable地址.通过查看头文件,我们知道vtable中方法的顺序.

例:

class Base
{
public:

    virtual void printmessage()
    {
        std::cout << "Base::printmessage()" << std::endl;
    }
};

class Derived : public Base
{
public:

    void printmessage()
    {
        std::cout << "Derived::printmessage()" << std::endl;
    }
};

int main(int argc,char* argv[])
{
    Derived d;

    unsigned int vtblAddress = *(unsigned int*)&d;

    typedef void(*pFun)(void*);

    pFun printFun = (pFun)(*(unsigned int*)(vtblAddress));

    printFun(&d);

    return 0;
}

附:我不会问为什么你这样做,但在这里你有一个选择:-)

大佬总结

以上是大佬教程为你收集整理的c – 从V-table调用虚函数全部内容,希望文章能够帮你解决c – 从V-table调用虚函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。