AGB  ·  Datenschutz  ·  Impressum  







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

Compiler ändert asm Code ?

Ein Thema von TKC · begonnen am 14. Sep 2009 · letzter Beitrag vom 9. Mai 2010
Antwort Antwort
Seite 3 von 3     123   
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 16:43
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 17:06
ach, ich dachte der jump war nur so ein test
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#23

Re: Compiler ändert asm Code ?

  Alt 27. Apr 2010, 20:56
Zitat von Apollonius:
Ich finde das auch extrem lästig. In C++ würde man das mit __declspec(naked) lösen; in Delphi gibt es das nicht. Als hässlichen Workaround kannst du die Parameter sowie das stdcall weglassen. Wenn du die Funktion dann aus Delphi-Code aufrufen willst, nimmst du @xPostMessage und castest in einen entsprechenden Funktionszeigertypen, sodass du die Funktion mit Parametern aufrufen kannst.
Hallo,
ich muss das jetzt doch noch einmal ausgraben .. kann mir jemand an einem Beispiel zeigen wie ich so einen Typecast machen muss ?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#24

Re: Compiler ändert asm Code ?

  Alt 9. Mai 2010, 11:08
Hi,
muss das leider nochmal hochholen. Wär klasse wenn mir jemand nen beispiel hat.
Danke.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.588 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Compiler ändert asm Code ?

  Alt 9. Mai 2010, 12:00
Delphi-Quellcode:
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;
So sollte es gehen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#26

Re: Compiler ändert asm Code ?

  Alt 9. Mai 2010, 12:18
Der automatisch erzeugte Eintritts- und Austrittscode (genannt Stack-Frame):
Delphi-Quellcode:
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
Dazu kommt dann noch die Behandlung von
{$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]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#27

Re: Compiler ändert asm Code ?

  Alt 9. Mai 2010, 12:59
Zitat von jaenicke:
Delphi-Quellcode:
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;
So sollte es gehen.
Vielen Dank ich werde es gleich mal probieren und Bericht erstatten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 11:56 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