Invoke comme dans Masm pour Yasm & Nasm :)

Oui je sais, le titre va en faire fuir plus d’un, d’autres vont encore me dire que j’ai définitivement sombré… Mais regardez ma belle macro :

Traduisons; M/Y/Nasm sont tous les 3 des assembleurs x86. M pour Microsoft, Y pour ?? je ne sais pas et N pour Netwide. Ces derniers temps je me suis remis à l’assembleur et j’ai jeté mon dévolus sur Yasm (dispo sur Cygwin). C’est un rewrite de Nasm sous licence BSD. Ce dernier comprend la syntaxe de Nasm, Gas (le Gnu Assembleur) et même un peu de Tasm (Feu l’assembleur de Borland ou j’ai passé du bon temps). Le soucis c’est que j’ai aussi de vagues relents de Masm appris dans ma  folle jeunesse et ce dernier est fort utile pour Windows. Masm dispose de la commande Invoke et il connait toutes les librairies Microsoft, cela permet de rapidement et clairement faire un call à une librairie quelquonque. Si on ne dispose pas d’Invoke, pour appeler une api windows il suffit de poser sur la pile les arguments en sens inverse à la documentation. Je m’explique, par exemple pour un simple popup sous Windows la documentation Microsoft dit :

http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

Sans Invoke dans Yasm, pour faire un programme qui popup et quitte c’est comme cela :

Sous Masm (M pour Microsoft) il y a une convention d’appel bien sympa, qui remet les paramètres dans le bon sens et qui clarifie le code, le fameux Invoke Et bien sur en contrepartie il y a un tombereau d’includes et de fichiers à se trainer.

Mais grâce à c’te macro, c’est le meilleur des deux mondes :

Bon après pour les fondus de macro qui aiment les includes il y a bien NasmX mais je ne veux pas mettre le doigt dans des includes qui sont pas à moi et je ne sais pas si ca marche bien avec Yasm ;)

A+

Ps: Pour compiler Yasm et pour Linker Golink

This entry was posted in Coding and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code