How to hack der virtuellen Tabelle?

Ich würde gerne wissen, wie das ändern der Adresse von Test die in der virtuellen Tabelle mit der HackedVTable.

void HackedVtable()
{
    cout << "Hacked V-Table" << endl;
}

class Base
{    
public:
    virtual Test()  { cout <<"base";    }
    virtual Test1() { cout << "Test 1"; }
    void *prt;
    Base(){}
};

class Derived : public Base
{
public: 
    Test()
    {
        cout <<"derived";
    }
};

int main()
{    
    Base b1;

    b1.Test(); //how to change this so that `HackedVtable` should be called instead of `Test`?

    return 0;
}

Antwort wird sehr geschätzt werden.

Vielen Dank im Voraus.

Ich interessiere mich nicht, warum Sie dies tun wollen. Seine eine schlechte Idee. Tun Sie es nicht.
dies ist nur für die Ausbildung Zweck. ich wollte wissen, wie es funktioniert. 🙂
Kommentar ist der beste Rat, den Sie bekommen können für pädagogische Zwecke. ansonsten - einfach aufgeben, der compiler ist besser für diesen job.
Normalerweise würde ich dir Zustimmen, aber come on. Build a compiler? "Ja, entweder zu manipulieren, einige Speicher, oder erstellen einen compiler." Die zwei variieren enorm in Schwierigkeiten! Sie können nicht möglicherweise nehmen Sie sich selbst ernst, wenn Sie vorschlagen, jemand build a compiler über Herumspielen mit einigen Speicher. Es ist eine schreckliche Idee für jede Produktion code, aber Herumspielen mit diese Dinge offenbaren kann eine Menge darüber, wie Sie arbeiten, und Sie können lernen, eine Menge in den Prozess.
Ein Beispiel, wie dies funktioniert in COM (die übersetzt C++ auf windows -)

InformationsquelleAutor mahesh | 2009-10-09

Schreibe einen Kommentar