![]() |
Re: Compiler ändert asm Code ?
Wenn du aus der Funktion herausjumpst, kann das die Zielfunktion übernehmen. Im Prinzip ist das ein Tailcall, auch wenn das manuelle Aufsetzen eines Stackframes etwas merkwürdig ist.
|
Re: Compiler ändert asm Code ?
ach, ich dachte der jump war nur so ein test
|
Re: Compiler ändert asm Code ?
Zitat:
ich muss das jetzt doch noch einmal ausgraben .. kann mir jemand an einem Beispiel zeigen wie ich so einen Typecast machen muss ? Danke |
Re: Compiler ändert asm Code ?
Hi,
muss das leider nochmal hochholen. Wär klasse wenn mir jemand nen beispiel hat. Danke. |
Re: Compiler ändert asm Code ?
Delphi-Quellcode:
So sollte es gehen.
procedure TestMe();
begin end; type TTestFunc = function(hWnd: hWnd; Msg: UINT; wParam: wParam; lParam: lParam): BOOL; stdcall; var TestFunc: TTestFunc; begin TestFunc := @TestMe; TestFunc(0, 0, 0, 0); end; |
Re: Compiler ändert asm Code ?
Der automatisch erzeugte Eintritts- und Austrittscode (genannt Stack-Frame):
Delphi-Quellcode:
Dazu kommt dann noch die Behandlung von
PUSH EBP // Vorhanden wenn Locals <> 0 oder Params <> 0
MOV EBP, ESP // Vorhanden wenn Locals <> 0 oder Params <> 0 SUB ESP, Locals // Vorhanden wenn Locals <> 0 PUSH ECX // - ... MOV EAX, [EBP-4] // Vorhanden wenn nachdem Result etwas zugewiesen wurde auch noch EAX // etwas zugewiesen wird, in diesem Fall wird für Result [EBP-4] statt // EAX verwendet - wenn Result <= Integer POP ECX // - MOV ESP, EBP // Vorhanden wenn Locals <> 0 POP EBP // Vorhanden wenn Locals <> 0 oder Params <> 0 RET Params // Immer vorhanden {$W+} oder {$STACKFRAMES ON} [equote="OH satgt zu ''Stack-Frames (Delphi)''"]Die Direktive $W steuert die Erzeugung von Stack-Frames für Prozeduren und Funktionen. Im Status {$W+} werden Stack-Frames für Prozeduren und Funktionen auch dann erzeugt, wenn sie nicht benötigt werden. Im Status {$W-} werden Stack-Frames nur generiert, wenn die Verwendung lokaler Variablen durch die Routine dies erforderlich macht. [/equote] |
Re: Compiler ändert asm Code ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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