Prologue stdcall [Résolu]

Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 1 oct. 2006 à 21:49
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.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
3
Merci
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++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17
0
Merci
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.
Commenter la réponse de yann_lo_san
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
Prologue stackframe n'est d'aucune utilité, ne fait que perdre des cycles.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
0
Merci
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;
Commenter la réponse de cs_juju12
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
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++
Commenter la réponse de BruNews