Prologue stdcall [Résolu]

Signaler
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonsoir;
Dans le but d'optimiser la rapidité d'appel de fonction dnas un prog, je veux écrire mes propres prologue-épilogue (__declspec(naked)) tout en respectant la convention stdcall.
J'ai donc visionné le code assembleur généré par le compilateur pour une quelconque fonction et je bute sur ce passage :

mov ecx,30h;
mov eax,0CCCCCCCCh;
rep stos dword ptr es:[edi];

J'ai bien compris que ce code copie 48 fois 0xCCCCCCCC dans le Data Segment ES mais à quoi correspond ce dernier (qu'y-a-t'il dedans) ? Et est-il nécessaire de l'initialiser à chaque appel de fonction (ça fait quand même pas mal de cycles au bout du compte).

Je remercie tous ceux qui prendront la peine de répondre.

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Tu n'as aucun prolgue à mettre si tu écris ta fonction en ASM, que soit stdcall, fastcall ou cdecl.
La différence sera dans le mode de récup des params.

ciao...
BruNews, MVP VC++
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
22
Si tu restes en stdcall, le prologue sert juste à sauver EBP, pointer EBP sur ESP et récupérer les param de pile.
MSDN :
Les arguments d'une fonction __stdcall font l'objet d'un push sur la pile de droite à gauche, et la routine appelée exécute un pop sur ces arguments à partir du dessus de la pile avant de retourner.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Prologue stackframe n'est d'aucune utilité, ne fait que perdre des cycles.

ciao...
BruNews, MVP VC++
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Bon en gros je peux négliger ce rep stos...
J'aurais quand même aimé savoir à quoi il sert mais bon...c'est pas important finalement.
Merci;
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Faudrait déjà savoir si tu es bien sur l'entrée de ta fonction.
Dans tous les cas, ça n'a aucun rapport avec qlq prologue que ce soit.

Evite de prendre exemple sur le listing de ton compilo, il emploie des instructions vraiment obsolètes (stos et autres vieilleries de ce genre).

ciao...
BruNews, MVP VC++