Re: Funktionsname herausfinden
Zitat:
Zitat:
|
Re: Funktionsname herausfinden
Ich halte es einfach nur nicht für praktisch unmöglich, jedoch in einigen Fällen für extrem aufwendig. :wink:
In den meisten ist es jedoch recht einfach. (Rücksprungaddresse auslesen und vor ihr den offset lesen) Es ist so zumindest möglich, sich was zu bauen, was einem in den meisten Fällen mit wenig Aufwand den Funktionsnamen/Einsprungspunkt mitloggt (ansonsten "unbekannt") und ihn ergänzend mit dem EIP aufführt. [Edit]Es müsste sogar immer möglich sein, wenn man Zugriffe auf die RTTI eines Objektes zulässt und dort den aktuellen EIP mit den Einsprungspunkten der Methoden vergleicht, die in der PE hintereinanderliegen sollten. Somit kommt man dann immer an den Einsprungspunkt, jedoch nur für Methoden, nicht für alle Funktionen. Außerdem sind die RTTI laut Hilfe versionsabhängig. |
Re: Funktionsname herausfinden
Die RTTI speichert nur das, was man auch über Methodaddress bekommt.
|
Re: Funktionsname herausfinden
Das Porblem ist mehr, dass man für Methodaddress den Metodennamen wissen muss. Methodaddress gibt den Einsprungspunkt zurück und um den geht es ja, ist also schon das Richtige. Das Problem ist also alle in der RTTI gespeicherten Einsprungspunkte durchzugehen und dann zu schauen, zwischen welchen der momentane EIP liegt.
Das müsste entweder über
Delphi-Quellcode:
und dann mit den Informationen weiter arbeiten gehen, oder über was anderes anderes aus TypInfo oder über manuelles durchforsten der RTTI gehen, wenn man denn den genauen Aufbau wüsste.
GetTypeData(Self.ClassInfo);
Die brauchbarste Information über die RTTI, die ich gefunden habe ist http://www.suite101.com/article.cfm/...gramming/64922 , allerdings schreib ich morgen nen LK und werde das heute nicht mehr weiter verfolgen. |
Re: Funktionsname herausfinden
Die nützlichste mir bekannte Quelle über RTTI in Delphi ist
Hallvard Vassbotns Blog. Dort sind alle Datenstrukturen, insbesondere die undokumentierten, aufgelistet. Die Methodeninformationen sind nicht dokumentiert und auch nicht bei ClassInfo verzeichnet, sondern an einem anderen Offset, nämlich System.vmtMethodTable. |
Re: Funktionsname herausfinden
Zitat:
(Für das Enumerieren der Methoden-RTTI einer Klasse hatte ich hier mal ein Beispiel gepostet, allerdings in C++.) |
Re: Funktionsname herausfinden
mal so'ne frage wozu brauchst du das
? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 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