![]() |
user defined calling convention hooken
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:
Da nichts in der Funktion gemacht wird, dachte ich, dass EAX und EDI unberührt bleiben würden. Aber anscheind irrte ich mich da.
procedure Callback_WalkList(a3, a4: DWORD);
begin new_WalkList(a3,a4); end; Denn Delphi benutzt EAX um die Parameter auf den Stack zu pushen. :/ Hier beim Aufruf von new_WalkList()
Delphi-Quellcode:
Wie verhindere ich nun, dass Delphi EAX für den Funktionsaufruf nutzt? :/
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] Den sonstigen Erhalt beider Register kann ich ja problemlos mit InlineASM per PUSH und POP vom/auf den Stack regeln. |
Re: user defined calling convention hooken
hallo,
liegt doch noch ordentlich im Stack oder?..pop evtl.? |
Re: user defined calling convention hooken
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; |
Re: user defined calling convention hooken
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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