Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   __declspec( naked ) in Delphi? (https://www.delphipraxis.net/162194-__declspec-naked-delphi.html)

Zacherl 11. Aug 2011 16:09

Delphi-Version: 2010

__declspec( naked ) in Delphi?
 
Hallo zusammen,

gibt es in Delphi eine mit __declspec( naked ) vergleichbare Direktive, welche verhindert, dass der Compiler automatisch ein Stackframe anlegt?

Viele Grüße
Zacherl

sirius 11. Aug 2011 16:39

AW: __declspec( naked ) in Delphi?
 
meinst du die Direktive {$W-} bzw. {$STACKFRAMES OFF} ?

SirThornberry 11. Aug 2011 16:42

AW: __declspec( naked ) in Delphi?
 
du meinst aber nicht etwa die Aufrufkonvention cdecl? __declspec kenn' ich in C nur in Verbindung mit Aufrufkonvention.

sirius 11. Aug 2011 16:45

AW: __declspec( naked ) in Delphi?
 
Zitat:

Zitat von SirThornberry (Beitrag 1116298)
du meinst aber nicht etwa die Aufrufkonvention cdecl? __declspec kenn' ich in C nur in Verbindung mit Aufrufkonvention.

http://docwiki.embarcadero.com/RADSt...eclspec(naked)

DeddyH 11. Aug 2011 16:52

AW: __declspec( naked ) in Delphi?
 
Zitat:

Diese Seite enthält momentan noch keinen Text. Du kannst diesen Titel auf den anderen Seiten suchen, in den zugehörigen Logbüchern suchen oder dieser Seite bearbeiten.
Nicht sehr informativ :roll:

sirius 11. Aug 2011 16:58

AW: __declspec( naked ) in Delphi?
 
Zitat:

Zitat von DeddyH (Beitrag 1116305)
Zitat:

Diese Seite enthält momentan noch keinen Text. Du kannst diesen Titel auf den anderen Seiten suchen, in den zugehörigen Logbüchern suchen oder dieser Seite bearbeiten.
Nicht sehr informativ :roll:

Der Codeformatierer der DP hat die schließende Klammer der url einfach nicht mit in die url-Tags gebastelt. :oops:

Zacherl 11. Aug 2011 17:00

AW: __declspec( naked ) in Delphi?
 
Doch doch ich meine schon die Aufrufkonvention __declspec, wie man sie von C her kennt. Habe jetzt herausgefunden, dass Delphi nur dann kein Stackframe anlegt, wenn man folgendes macht:
Delphi-Quellcode:
procedure MyNakedProc;
asm

end;
Also ist man da scheinbar auf reinen Assembler Code beschränkt.

sirius 11. Aug 2011 17:11

AW: __declspec( naked ) in Delphi?
 
Ich welchen Fällen kommt es denn vor, dass man keinen Stackframe braucht?

Delphi nimmt bei mir den Stackframe sowieso weg, wenn er nicht von nöten ist.

himitsu 11. Aug 2011 17:32

AW: __declspec( naked ) in Delphi?
 
Zitat:

Zitat von sirius (Beitrag 1116311)
Delphi nimmt bei mir den Stackframe sowieso weg, wenn er nicht von nöten ist.

Zitat:

{$W-} bzw. {$STACKFRAMES OFF}
-, bzw. OFF ist ja auch die Standardeinstellung.

ehX 11. Aug 2011 22:32

AW: __declspec( naked ) in Delphi?
 
Zitat:

Doch doch ich meine schon die Aufrufkonvention __declspec, wie man sie von C her kennt. Habe jetzt herausgefunden, dass Delphi nur dann kein Stackframe anlegt, wenn man folgendes macht:
markieren
Delphi-Quellcode:
procedure MyNakedProc;
asm

end;
Also ist man da scheinbar auf reinen Assembler Code beschränkt.
Dann macht es Delphi ja hier auch genau richtig? Denn eine __declspec(naked) Konvention ist ja dafür da, um sich seinen eigenen Prolog/Epilog-Code in Assembler für die Funktion zu schreiben:

Zitat:

Zitat von http://msdn.microsoft.com/en-us/library/h5w10wxs%28v=vs.80%29.aspx
For functions declared with the naked attribute, the compiler generates code without prolog and epilog code. You can use this feature to write your own prolog/epilog code sequences using inline assembler code.

Ich frage mich allerdings, rein interessehalber...wofür brauchst du das? Normalerweise brauchen das ja (fast) nur die Treiber-Schreiber. Und das geht mit Delphi ja eh nicht :-)

P.S. Achja.btw...ich bin blackFin...ich habe hier "ausversehen" meinen Account gelöscht...fragt nicht, das "Warum" lässt sonst alle hier an meinem Hirn zweifeln :-D

sirius 12. Aug 2011 08:35

AW: __declspec( naked ) in Delphi?
 
Zitat:

Zitat von himitsu (Beitrag 1116315)
Zitat:

Zitat von sirius (Beitrag 1116311)
Delphi nimmt bei mir den Stackframe sowieso weg, wenn er nicht von nöten ist.

Zitat:

{$W-} bzw. {$STACKFRAMES OFF}
-, bzw. OFF ist ja auch die Standardeinstellung.

Aha, aber wenn ich es bei einer simplen Funktion (in D7) anschalte, wird trotzdem kein Stackframe gebaut.

JamesTKirk 12. Aug 2011 08:48

AW: __declspec( naked ) in Delphi?
 
Zitat:

Zitat von Zacherl (Beitrag 1116288)
Hallo zusammen,

gibt es in Delphi eine mit __declspec( naked ) vergleichbare Direktive, welche verhindert, dass der Compiler automatisch ein Stackframe anlegt?

Viele Grüße
Zacherl

Ich weiß nicht, ob es dir was bringt, aber Free Pascal bietet sowas: nostackframe

Mich würde dennoch auch interessieren, wofür du das benötigst. :gruebel:

Gruß,
Sven

Zacherl 12. Aug 2011 18:44

AW: __declspec( naked ) in Delphi?
 
Ich wollte einen naked Hook innerhalb einer Funktion anbringen. Mit dem asm Funktionsrumpf funktioniert das jetzt auch wunderbar. Vorher wurde mir der Stack durch den Stackframe Prolog zerstört. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 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