AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einsprungadresse einer Procedur ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Einsprungadresse einer Procedur ermitteln?

Ein Thema von richard_boderich · begonnen am 28. Jun 2006 · letzter Beitrag vom 28. Jun 2006
Antwort Antwort
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#1

Re: Einsprungadresse einer Procedur ermitteln?

  Alt 28. Jun 2006, 19:12
Zitat von negaH:
Gerade die statischen Methoden werden über eine relative Addresse ausgehend von der Position des CALLs im eigenen Code angesprungen. Das trifft auch im besonderen auf die Importtabelle zu, man springt per relativen Call in die Importtabelle wo dann ein absoluter JMP ins API steht (LOadLibrary als importierte Funktion ist also sehr wohl betroffen). Dh. wird der entschlüsselte Code aus einem anderen Speicherbereich ausgeführt (weil er ja in einen dyn. Speicher entschlüsselt wurde und NICHT im gleichen Codesegement inplaced) stimmen diese relativen Addressangaben eben nicht mehr und das führt konsequenter Weise zu einer AV.
Nein er wird ja eben NICHT in dynamischen Speicher entschlüsselt. Wenn man die Virtuelle Adresse hat und diese in die Rawdaten Adresse umrechnet, kann man den direkt patchen (die länge hat man ja). Beim entschlüsseln wird dann eben die Virutelle Adresse genommen und der code entschlüsselt und danach aufgerufen.


Zitat von negaH:
Aber wie im Thread angesprochen ist dies bei virtuellen, dynamischen und Interface Methoden nicht mehr der Fall. Denn diese sind indirekte Calls an eine absolute Speicheraddresse im Codesegment.
Eben das liegt nicht vor, sonst würde Addr(Procedurename) {bzw} @ProcedureName wie schon weiter oben erähnt keinen sinn machen.

Ich wollte eigentlich vermeinden, dass du mir hier was erklärst, da ich es schon selbst weiß. Deshalb bruachtest auch nur ein Beispiel nennen, da es sich hier um den 1. Fall handelt, nicht aber um deinen 2. beschrieben.

Beim Code

Delphi-Quellcode:
procedure CodeStart;
begin
  MessageBoxA(0,'elelel','test',0);
end;
procedure CodeEnd; asm end;
treten zwar globale Variablen auf (die Strings), aber da es sich um eine Exe handelt werden diese nichr realokiert. Und das Problem mit der Importtabelle wird ebenfalls nicht auftreten, da nirgendwo davon gesprochen wird, den Code nicht direkt wieder zu entschlüsseln.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:19 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