Ben voilà j'espère que quelqu'un aura la réponse, j'aimerais savoir si c'est possible et si oui, comment gérer des dll en assembleur (appeller les fonctions).
Merci beaucoup d'avance !!!
Ben voilà j'espère que quelqu'un aura la réponse, j'aimerais savoir si c'est possible et si oui, comment gérer des dll en assembleur (appeller les fonctions).
Merci beaucoup d'avance !!!
c'est possible pour l'api windows, c'est une convention simple suffit de pusher les args (je sais plus si cest de droite a gauche ou de gauche a droite) plus compliquer pour dautre dll ecrite avec dautres langages comme le pascal car les args sont passes par registres (mais il existe des directives de compilations pour modifier cela)
Tout dépends de ton dll. Souvent il existe des librairies qui liées te donne implicitement les références. Elles ont l'avantage pratique, de n'avoir rien à gérer coté dll. Sinon, il faut utiliser l'API. Pour Win32 GetProcAdress ou un truc du genre. Tout est possible en asm, mais rien n'est souhaitable. Quant aux conventions d'appel, ca dépends du dll. C'est la doc qui va avec le dll ou toi si c'est toi qui fait le dll qui va décider de la convention. Il y en a plusieurs, C (empilement de droite à gauche, appelant qui néttoie la pile, leading underscore) stdcall (empilement de droite à gauche, appelé qui nettoie, pas de leading underscore), PAscal (Droite à gauche etc.
Tu n'est pas forcé de passer par GetProcAddress et LoadLibraryA.
Mettons que tu veuilles sous tasm32 appeler l'api xxx d'un dll yyy,
tu fais un:
Seulement, tlink ensuite ne sait pas forcément dans quelle dll se situe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 extrn xxx:PROC ... push arguments call xxx
cette api, c'est pourquoi il faut lui passer en argument un fichier .lib
qui est chargé de faire la jonction entre nom de l'api et dll où elle se situe.
Si ton api est une api classique (située dans kernel32.dll ou user32.dll ou ...)
alors la lib fournie avec tasm32,import32.lib, suffit. Tu appeleras alors tlink 32 comme ceci:
Si ton api est située dans une dll plus exotique, il faudra crée toi-même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tlink32 /Tpe /aa ton_fichier_objet,,, import32.lib
le fichier.lib correspondant au dll, avec implib.exe par exempe:
Pour les autres assembleurs, ca doit être sensiblement la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 implib yyy.lib yyy.dll tlink32 /Tpe /aa ton_fichier_objet,,, import32.lib yyy.lib
Partager