AGB  ·  Datenschutz  ·  Impressum  







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

user defined calling convention hooken

Ein Thema von Neotracer64 · begonnen am 13. Mär 2008 · letzter Beitrag vom 13. Mär 2008
 
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#1

user defined calling convention hooken

  Alt 13. Mär 2008, 01:25
Hallo,

Ich muss eine Funktion hooken, dessen Parameter halb über register und halb normal über den Stack übergeben werden.

1. Parameter in EAX
2. Parameter in EDI
3. Parameter in [ESP]
4. Parameter in [ESP+04]

Pseudo-Typedef:
procedure sub_WalkList(a1<eax>, a2<edi>, a3, a4: DWORD);

Wie setze ich nun am besten meinen Callback auf, sodass keine Parameter zerstört werden?

Zum testen habe ich folgendes probiert:

Delphi-Quellcode:
procedure Callback_WalkList(a3, a4: DWORD);
begin
  new_WalkList(a3,a4);
end;
Da nichts in der Funktion gemacht wird, dachte ich, dass EAX und EDI unberührt bleiben würden. Aber anscheind irrte ich mich da.
Denn Delphi benutzt EAX um die Parameter auf den Stack zu pushen. :/

Hier beim Aufruf von new_WalkList()

Delphi-Quellcode:
01731A64 55 PUSH EBP
01731A65 8BEC MOV EBP,ESP
01731A67 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C] // Parameter in EAX wird zerstört
01731A6A 50 PUSH EAX
01731A6B 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
01731A6E 50 PUSH EAX
01731A6F FF15 44477301 CALL DWORD PTR DS:[1734744]
Wie verhindere ich nun, dass Delphi EAX für den Funktionsaufruf nutzt? :/
Den sonstigen Erhalt beider Register kann ich ja problemlos mit InlineASM per PUSH und POP vom/auf den Stack regeln.
  Mit Zitat antworten Zitat
 


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 07:14 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 by Thomas Breitkreuz