AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Adresse einer privaten Methode bekommen

Ein Thema von Win32.API · begonnen am 18. Jul 2010 · letzter Beitrag vom 19. Jul 2010
Antwort Antwort
Seite 3 von 3     123   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 06:34
So weit es möglich ist sollte man eh uaf solche Hacks verzichten. Denn diese Lücke könnte irgendwann geschlossen werden
Markus Kinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#22

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 06:40
So weit es möglich ist sollte man eh uaf solche Hacks verzichten. Denn diese Lücke könnte irgendwann geschlossen werden
Ich bin der Meinung, man sollte lieber darauf verzichten, beliebige Sachen als privat zu deklarieren, wenn es keinen echten Grund dafür gibt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#23

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 06:44
So weit es möglich ist sollte man eh uaf solche Hacks verzichten. Denn diese Lücke könnte irgendwann geschlossen werden
Ich hoffe die machen sowas erst dann, wenn sie mal ihre Sichbasrkeitsrichtlinien verbessert haben.

Es gibt z.B. keinen Grund, warum ProcessMessage (drum sind dieses und Delay soein schönes Beispiel) versteckt sein muß.

ProcessMessages bearbeitet immer alle Messages, bis nix mehr da ist.
ProcessMessage verarbeitet nur die nächste Message, also könnte man damit.
Somit könnte Delay hier seine Pausenzeiten besser einhalten, da man die Verarbeitung eher abbrechen könnte und nicht alles sofort verarbeitet.

Ich bin der Meinung, man sollte lieber darauf verzichten, beliebige Sachen als privat zu deklarieren, wenn es keinen echten Grund dafür gibt.
jupp

Zitat:
Ist schon vor ca. 2 Monaten passiert, bis jetzt leider keine Besserung. Darum wollte ich es nun selber in die Hand nehmen.
Gut, ich hatte hier gerade noch 2 Jahre im Kopf und wollte grade sowas wie "sooo lange keine Antwort? ... is ja nett" sagen (aber )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#24

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 06:48
Das Ganze scheitert schon am Konzept. Du kannst nicht die Adresse einer privaten Prozedur auslesen. Eine private Prozedur ist vom Konzept her (ähnlich wie protected) nur INNERHALB eines Objektes verwendbar. Du kannst sie also auch nicht von außen aufrufen, weil es so aussieht, als würde sie gar nicht existieren. Somit kann sie von RTTI nicht gefunden werden.
Das stimmt so nicht. Mit Delphi 2010 (welches der TE nutzt) kann man von private bis published alles von einer Klasse über RTTI abrufen, sofern dies eingestellt wurde. Dafür gibt es spezielle Compiler Direktiven. Nützt dem TE natürlich nix, da wahrscheinlich nicht mit diesen RTTI Einstellungen kompiliert wurde und er den Source nicht hat (dann könnte er ja auch gleich die Methode fixen )

So weit es möglich ist sollte man eh uaf solche Hacks verzichten. Denn diese Lücke könnte irgendwann geschlossen werden
Ich bin der Meinung, man sollte lieber darauf verzichten, beliebige Sachen als privat zu deklarieren, wenn es keinen echten Grund dafür gibt.
Imo wird eher andersrum nen Schuh draus, es sollte nur public sein, was man auch von außen aufrufen soll/darf/muss. Und protected nur, was vom Design her dafür vorgesehen ist, in abgeleiteten Klassen modifiziert zu werden.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#25

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 06:57
So weit es möglich ist sollte man eh uaf solche Hacks verzichten. Denn diese Lücke könnte irgendwann geschlossen werden
Ich bin der Meinung, man sollte lieber darauf verzichten, beliebige Sachen als privat zu deklarieren, wenn es keinen echten Grund dafür gibt.
Imo wird eher andersrum nen Schuh draus, es sollte nur public sein, was man auch von außen aufrufen soll/darf/muss.
Nein, natürlich soll man nicht alles als public deklarieren. Ich deklariere auch nur die Sachen als public, die ich in der "offiziellen Anwendungsschnittstelle" haben will. Alles andere deklariere ich aber zum Großteil als protected und nicht als private. Nur in sehr seltenen Sonderfällen, wenn es wirklich einen triftigen Grund gibt, warum Nachfahren keinen direkten Zugriff haben dürfen, deklariere ich Methoden oder Felder als privat.
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#26

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 07:36
Delphi-Quellcode:
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.
Das funktioniert bei mir. Ich weiß allerdings nicht genau was du damit meinst:
Zitat:
Eine "Hack"/"Dummy"-Klasse kommt in diesem Fall nicht in Frage, da der Code für mehrere Versionen der Klasse arbeiten soll.

Jawoll . Das Zusammenspiel aus Classhelper und Zugriff via Assembler macht es Möglich.

Mit Hack-Klasse meinte ich eine Klasse, die exakt gleich deklariert ist, aber die entsprechende Methode als public deklariert. Somit liegt im Speicher alles an der gleichen Stelle und der Zugriff ist auch Möglich.

Grüße,
Win32.API
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#27

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 08:29
Mit Hack-Klasse meinte ich eine Klasse, die exakt gleich deklariert ist, aber die entsprechende Methode als public deklariert. Somit liegt im Speicher alles an der gleichen Stelle und der Zugriff ist auch Möglich.
Das geht aber nur mit virtuellen oder dynamischen Methoden
und mit Feldern.
Normalte Methoden kann man so nicht zugänglich machen, da diese direkt im Quellcode, bei allen Aufrufen, und z.B. nicht über die VMT des erzeugten Objekts adressiert sind.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz