Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Compiler ändert asm Code ? (https://www.delphipraxis.net/140239-compiler-aendert-asm-code.html)

Neutral General 14. Sep 2009 13:45

Re: Compiler ändert asm Code ?
 
Hi,

Zitat:

wird daraus ...

Delphi-Quellcode:
003A5C60 G> $  55                push   ebp
003A5C61    . 8BEC             mov    ebp, esp
003A5C63    . 89FF             mov    edi, edi
003A5C65    . FF25 70FF3A00     jmp    near dword ptr [3AFF70]

Ich weiß nicht warum das noch niemand so direkt gesagt hat. Aber der Compiler ändert gar nichts ;)

Das

Delphi-Quellcode:
push ebp
mov ebp, esp
gehört zu der stdcall Aufrufkonvention und wird vom compiler automatisch erzeugt. Also das hat schon alles so seine Richtigkeit ;)

TKC 14. Sep 2009 13:52

Re: Compiler ändert asm Code ?
 
Zitat:

Zitat von Apollonius
Das ändert am zugrunde liegenden Problem rein gar nichts. Nebenbei bemerkt kannst du dein mov edi, edi jetzt tatsächlich ersatzlos streichen.

Stimmt natürlich ... hatte ich eben selbst gemerkt :wink:

Zitat:

Zitat von Neutral General
Hi,
gehört zu der stdcall Aufrufkonvention und wird vom compiler automatisch erzeugt. Also das hat schon alles so seine Richtigkeit ;)

Naja wenn ich stdcall weglasse schauts immer noch so aus !

Apollonius 14. Sep 2009 13:55

Re: Compiler ändert asm Code ?
 
Zitat:

Zitat von Neutral General
Das gehört zu der stdcall Aufrufkonvention und wird vom compiler automatisch erzeugt. Also das hat schon alles so seine Richtigkeit ;)

Quatsch. Das ist ein Detail der Implementation, während die Aufrufkonvention zum Contract gehört. Wenn ich den Stackframe nicht haben will, dann soll der Compiler auch keinen generieren.

TKC 14. Sep 2009 14:02

Re: Compiler ändert asm Code ?
 
Zitat:

Zitat von Apollonius
Wenn ich den Stackframe nicht haben will, dann soll der Compiler auch keinen generieren.

Sehe ich auch so.

gammatester 14. Sep 2009 14:15

Re: Compiler ändert asm Code ?
 
Zitat:

Zitat von TKC
Zitat:

Zitat von Apollonius
Wenn ich den Stackframe nicht haben will, dann soll der Compiler auch keinen generieren.

Sehe ich auch so.

Zitat:

Zitat von Delphi Hilfe
The compiler only generates stack frames for nested routines, for routines that have local parameters, or for routines that have parameters on the stack.


Apollonius 14. Sep 2009 14:17

Re: Compiler ändert asm Code ?
 
So what? In einer reinen Assembler-Routine sind Parameter auf dem Stack kein Grund, einen Stackframe zu generieren.

gammatester 14. Sep 2009 14:45

Re: Compiler ändert asm Code ?
 
Da im Originalbeitrag
Delphi-Quellcode:
function xPostMessage(hWnd: hWnd; Msg: UINT; wParam: wParam; lParam: lParam): BOOL; stdcall;
asm
      mov edi, edi
      push ebp
      mov ebp, esp
      jmp OldDllFunc
end;
überhaupt nicht auf die Parameter zu gegriffen wird und auch via jmp eh nicht der Stackframe abgebaut wird kann man doch eigentlich gleich schreiben?

Delphi-Quellcode:
function xPostMessage: BOOL; stdcall;
asm
      mov edi, edi
      push ebp
      mov ebp, esp
      jmp OldDllFunc
end;
Dann wird auch kein Stackframe erzeugt.

Apollonius 14. Sep 2009 14:51

Re: Compiler ändert asm Code ?
 
Das war doch praktisch mein Vorschlag aus #2. Aber dann wird es eben hässlich, wenn man xPostMessage aus Delphi aufrufen will.

TKC 14. Sep 2009 15:24

Re: Compiler ändert asm Code ?
 
Zitat:

Zitat von Apollonius
Das war doch praktisch mein Vorschlag aus #2. Aber dann wird es eben hässlich, wenn man xPostMessage aus Delphi aufrufen will.

Stimmt ist etwas umständlich aber es funktioniert auch.

sirius 14. Sep 2009 15:38

Re: Compiler ändert asm Code ?
 
Aber den Stack sollte man trotzdem hinterher aufräumen. (oder man nimmt cdecl)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Seite 2 von 3     12 3      

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