![]() |
AW: Adresse einer privaten Methode bekommen
Dann frag den Rückabe wert nicht ab? Wenn der immer true sein soll ist das Result ja egal
|
AW: Adresse einer privaten Methode bekommen
Eine Rückgabe die immer True ergibt? Dann könnte man ja auf die Rückgabe verzichten
|
AW: Adresse einer privaten Methode bekommen
Zitat:
Spannendes Problem :twisted: |
AW: Adresse einer privaten Methode bekommen
Zitat:
|
AW: Adresse einer privaten Methode bekommen
Dann melde es dem Hersteller
|
AW: Adresse einer privaten Methode bekommen
Zitat:
|
AW: Adresse einer privaten Methode bekommen
Delphi-Quellcode:
Das funktioniert bei mir. Ich weiß allerdings nicht genau was du damit meinst:
unit Unit1;
interface uses classes; type TMyClass = class strict private procedure BuggyMethod; end; TMyClassHack = class helper for TMyClass public function GetBuggyMethodAddress: Pointer; end; procedure Test; implementation uses SysUtils; { TmyClassHack } function TMyClassHack.GetBuggyMethodAddress: Pointer; asm lea eax, [0+TMyClass.BuggyMethod] end; { TMyClass } procedure TMyClass.BuggyMethod; begin writeln('hello'); end; procedure Test; var Obj: TMyClass; Addr: Pointer; begin Obj := TMyClass.Create; writeln(format('%p',[Obj.GetBuggyMethodAddress])); Addr := Obj.GetBuggyMethodAddress; asm call Addr end; Obj.Free; end; end. Zitat:
|
AW: Adresse einer privaten Methode bekommen
strict private sollte doch eigentlich komplett privat sein, also nichtmal in einer anderen Klasse, der selben Unit.
Und selbt normale private Methoden kann man "eigentlich" nicht von anderen Units aus aufrufen. Wollte erst fragen, ob du das auch mal mit getrennten Units getestes hast, aber selbst da geht es. Also dieser Hack ist dann ja richtig böse :shock: Es gibt abner noch einen einfachen Hack, um virtuelle private Methoden zu bekommen ... ohne RTTI- oder VMT-Auslesen und so. Einfach 'ne Dummy-Klasse, ebenfalls mit diesen virtuellen Methoden (natürlich in selber Reihenfolge) erstellen und rübercasten. |
AW: Adresse einer privaten Methode bekommen
Zitat:
Zitat:
[edit] Zitat:
[/edit] |
AW: Adresse einer privaten Methode bekommen
Hättest du das nicht mal vor 'nem knappen Jahr sagen können?
Weil irgendein "Arsch" TApplication.ProcessMessage als Privat deklariert hat, kommt man da einfach nicht ran und so hätte ich mir vel Arbeit und umständliche Alternativen ersparen können. :cry: Hey, jetzt könnte man vermutlich auch Hagens Delay mit einer noch besseren Zeiteinhaltung versehen, selbst wenn viele Messages eintreffen :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz