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 2 von 3     12 3      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 14:45
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 14:52
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

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 !
  Mit Zitat antworten Zitat
Apollonius

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 14:55
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.
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 TKC
TKC

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 15:02
Zitat von Apollonius:
Wenn ich den Stackframe nicht haben will, dann soll der Compiler auch keinen generieren.
Sehe ich auch so.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#15

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 15:15
Zitat von TKC:
Zitat von Apollonius:
Wenn ich den Stackframe nicht haben will, dann soll der Compiler auch keinen generieren.
Sehe ich auch so.
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.
  Mit Zitat antworten Zitat
Apollonius

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 15:17
So what? In einer reinen Assembler-Routine sind Parameter auf dem Stack kein Grund, einen Stackframe zu generieren.
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
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#17

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 15:45
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.
  Mit Zitat antworten Zitat
Apollonius

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 15:51
Das war doch praktisch mein Vorschlag aus #2. Aber dann wird es eben hässlich, wenn man xPostMessage aus Delphi aufrufen will.
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 TKC
TKC

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 16:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Compiler ändert asm Code ?

  Alt 14. Sep 2009, 16:38
Aber den Stack sollte man trotzdem hinterher aufräumen. (oder man nimmt cdecl)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:38 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