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
Antwort Antwort
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
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: user defined calling convention hooken

  Alt 13. Mär 2008, 07:16
hallo,

liegt doch noch ordentlich im Stack oder?..pop evtl.?
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: user defined calling convention hooken

  Alt 13. Mär 2008, 08:57
evtl. so:
Delphi-Quellcode:
function new_WalkList(a1,a2,a3,a4:DWord):DWord;
begin
  ...
end;


procedure Callback_WalkList;
asm
  mov edx,edi
  pop ecx
  call new_WalkList;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Neotracer64

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

Re: user defined calling convention hooken

  Alt 13. Mär 2008, 15:09
Hallo, danke für die Antworten.
Ich hab es jetzt so gelöst:

Delphi-Quellcode:
procedure Callback_WalkList(a1,a2,a3,a4: DWORD);
asm
  POP EBP
  JMP new_WalkList;
end;

Das jumpt dann direkt zum Trampolin der Original-Funktion. Das POP EBP weil keine naked function calls mit delphi gehen und ich den aufgebauten stackframe wieder kaputt machen muss, weil sonst die return addresse nicht mehr stimmt.
  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 09:44 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