AGB  ·  Datenschutz  ·  Impressum  







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

Funktionsname herausfinden

Ein Thema von hitzi · begonnen am 9. Mär 2009 · letzter Beitrag vom 11. Mär 2009
Antwort Antwort
Seite 2 von 2     12   
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#11

Re: Funktionsname herausfinden

  Alt 10. Mär 2009, 15:35
Zitat von Cyf:
Zitat von generic:
Allerdings ist es praktisch unmöglich, eine beliebige Codeposition zweifelsfrei mit der Adresse der zugehörigen Funktion zu assoziieren, ohne über eine vollständige Funktionsliste zu verfügen, daher hilft das nichts.
Das ist nicht ganz richtig, es funktioniert in manchen Fällen allerdings nicht allen.
Wieso ist es dann nicht ganz richtig?
Zitat von DMW:
... praktisch unmöglich, eine beliebige Codeposition zweifelsfrei ...
Moritz
"Hey, it compiles! Ship it!"
C++Builder Pages
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#12

Re: Funktionsname herausfinden

  Alt 10. Mär 2009, 17:52
Ich halte es einfach nur nicht für praktisch unmöglich, jedoch in einigen Fällen für extrem aufwendig.
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.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Funktionsname herausfinden

  Alt 10. Mär 2009, 18:31
Die RTTI speichert nur das, was man auch über Methodaddress bekommt.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#14

Re: Funktionsname herausfinden

  Alt 10. Mär 2009, 19:16
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

GetTypeData(Self.ClassInfo); 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.
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.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Funktionsname herausfinden

  Alt 10. Mär 2009, 19:21
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#16

Re: Funktionsname herausfinden

  Alt 10. Mär 2009, 22:32
Zitat von Cyf:
[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.
Problematisch ist nur, daß du nicht wissen kannst, wo die Methode endet, sofern du nicht über eine vollständige Map-Datei verfügst.

(Für das Enumerieren der Methoden-RTTI einer Klasse hatte ich hier mal ein Beispiel gepostet, allerdings in C++.)
Moritz
"Hey, it compiles! Ship it!"
C++Builder Pages
  Mit Zitat antworten Zitat
Felix015

Registriert seit: 2. Okt 2008
16 Beiträge
 
#17

Re: Funktionsname herausfinden

  Alt 11. Mär 2009, 15:57
mal so'ne frage wozu brauchst du das
?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:46 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