Hack VMT - вызов приватного метода предка :: Cетевой уголок Majestio

Hack VMT - вызов приватного метода предка


Небольшие эксперименты показали - а почему бы и нет :-)

#include <iostream>
 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
class Base {
  public:
   virtual ~Base(){}
  private:
    virtual void ShowBase() {
      std::cout << "BaseShow" << std::endl;
    }
};
 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
class Derived: public Base {
  public:
    virtual void ShowDerived() {
      std::cout << "DerivedShow" << std::endl;
    }
};
 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
#ifdef _MSC_VER
  #define IDX 1
#else
  #define IDX 2
#endif  
 
int main() {
  Derived *D = new Derived();
  (*(void(*)(void*))((void**)(*(void**)D))[IDX])(D);  
  delete D;
  return 0;
}

При использовании M$ VC++ VMT строится по-иному.

Рейтинг: 0/5 - 0 голосов