cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 2010
-
1 oct. 2006 à 19:34
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
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 :
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.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 oct. 2006 à 20:05
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.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 1 oct. 2006 à 20:25
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.