C++中vritual虚函数漏洞,通过指针(利用虚表,调用函数)任然可以访问到基类中虚函数。...

本文深入探讨了C++面向对象编程中虚函数的使用,通过实例展示了如何利用虚表来调用不同类中的虚函数,具体包括基类和派生类之间的函数重写与调用过程。
#include <iostream>
using namespace std;
typedef void (*Fun)();
class Base
{
   private:
    virtual void fun1()
    {
      cout<<"Base fun1"<<endl;
    }
      virtual void fun2()
     {
      cout<<"Base fun2"<<endl;
      }
};
class Base1
{
   private:
    virtual void fun3()
    {
      cout<<"Base1 fun3"<<endl;
    }
virtual void fun4()
    {
      cout<<"Base1 fun4"<<endl;
    }
};
class Child:public Base,public Base1
{      
     virtual void fun1()
    {
      cout<<"child fun1"<<endl;
    }       
     virtual  void fun5()
      {
         cout<<"child fun5"<<endl;
      }  
    
};
int main()
{
    //利用虚表,调用函数
    Child c1;  
    Fun f1= (Fun)((int*)*((int*)(*(int*)&c1)));
    f1();
    f1= (Fun)((int*)*(((int*)*(int*)&c1)+1));
    f1();
   
    Fun f2= (Fun)((int*)*((int*)*((int*)&c1+1)));
    f2();
    f2= (Fun)((int*)*((int*)*((int*)&c1+1)+1));
    f2();
   
    f1= (Fun)((int*)*(((int*)*(int*)&c1)+2));
    f1();
    
}

转载于:https://www.cnblogs.com/wxishang/p/3468256.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值