msvcrt est une librairie haut niveau pour tout ce qui est interface.
mov eax eax , sert à l'alignement de code (comme les nop etc)
Tu as de la chance de ne pas utiliser la suite Visual qui génère un code pire que tout... déjà la différence de taille est correcte, Visual nous habitue à des x10 x20 tranquilles... et rajoute des points d’entrées dans tes applications (si si… véridique…)
La gestion de pile est, je crois, un des trucs que les compilo assurent le moins bien. Si tu essaies de remettre en forme le code tu verras que dans certains cas c'est tordu jusqu'à utiliser la pile pour des trucs absurdes (gagner rien, pour de l'interface, et utiliser un max. de registres de push de pop dans tous les sens pour des raisons vraiment incompréhensibles...).
Tu as essayé de supprimer le source de ton code RosAsm (Base3) avec SourceKiller et de le dé-assembler... tu verras la différence ;)))
Tu peux aussi essayer avec MASM.. C'est instructif ;))
Fais quelques essais avec la FPU. Pour tomber dans le grand comique.
D'après ce que tu dis, Nival, le C que tu utilise me semble être probablement GCC. Je n'ai jamais étudié la ligne de Commande, mais il est probable que tu puisse lui specifier un Flag "Optimize", ou quelque chose du genre.
Pour les Appels d'APIs indirects, c'est normal. Presque tous les Compilateurs font ça, pour la simple raison que le compilateur (je veux dire, au moment de la Compilation du Code...),... ne peut pas savoir où le Linker va mettre la Table PE d'Import. Ils déclarent donc une serie de JMPs "API", qui sert de relais. Donc les appels sont de la forme:
Inconvenient par rapport à la méthode directe (RosAsm):
* Deux instructions au lieu d'une.
Pour les:
mov eax D$ebp+10
push eax
mov edx eax
mov eax edx
... et autre bidules du genre.. je ne sais pas. Faut voir avec un Flag D'Optimization...
Quant à la taille réelle, ce qu'il faut comparer, c'est la taille de la section Code (/ Data éventuellement) à taille finale du PE mort. Elle et liée au nombre de sections. Normalement, le minimum légal est de 0200h * Nbre_de_Sections.
Quant aux appels à 'msvcrt', ils augmentent la portabilité. (faut pas oublier que GCC, - si ç'est bien ton Compilateur... -) vient du monde Linux.
Nival, prêt pour aller un peu plus loin (je veux dire la gestion de l'interface c'est une chose...) histoire de voir si les compilos suivent quand on descend un tout petit peu ?
__________________________ www.rosasm.org/ www.quanta-it.com/easbell/RosAsmForum
Mais je n'ai le temps d'experimenter que le week-end en ce moment donc ne t'inquiète pas de la lenteur de mes réponses, je reste attenetif malgré tout!
Oui, ça me va, j'ai regardé de quoi ça a l'air, j'avoue que je n'ai jamais utilisé le FPU mais ça a pas l'air trop compliqué, et plutôt intéressant!
Bon, je vais commencer par apprendre rapidement à utiliser le C++, j'imagine que ça devrait aller assez vite pour juste exécuter des lignes de calculs en virgule flottante!
En C++ c'est relativement simple tu devrais rapidement pouvoir avancer et ce n'est pas les exemples qui manquent
La seule astuce en FPU c'est le principe du lifo.
Avec RosAsm tu peux vérifier l'état de tes registres. Avec un peu d'expérience tu pourras rapidement éviter les pièges.