Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#15

Re: Wie private Setter-Methode überschreiben?

  Alt 28. Sep 2006, 15:57
macht nichts, denn das Patchen der RTTI ist ebenfalls nur die halbe Miete. Bei einem Zugriff wie Control.Cursor := crHourGlass benutzt der Compiler ja ebenfalls nicht die RTTI um die Setter Methode zu ermitteln. Der Compiler erzeugt einen direkten Code wie MyControl.SetCursor() weil er ja die privaten statischen/virtuellen Methoden ja selber kennt. Nur wenn man zb. ein Control/Form im OI ändert oder aber aus einer DFM lädt wird die RTL über die RTTI gehen. Deshalb eben nur halbe Miete.

Allerdings kann er mit der RTTI die Addresse im Codesegment ermitteln an der die private Setter Methode steht. Er patcht nun nicht mehr die RTTI der Property sondern überschreibt den Code dr Setter Methode. Er patcht also direkt diese Methode und baut ein JMP zu seiner neuen Setter Methode rein. ALLE Controls die von der Basisklasse abgeleitet sind würden ab diesem Moment seine neue Setter Methode benutzen.

Kein schöne Sache, aber es geht alles

Gruß Hagen

PS: ich werde hier keinen fertigen Source liefern ! selber machen und lernen ist also angesagt.
  Mit Zitat antworten Zitat