DLL AVEC NASM ET ALINK

cs_ibroman Messages postés 26 Date d'inscription lundi 12 août 2002 Statut Membre Dernière intervention 17 juin 2005 - 7 mai 2005 à 15:52
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006 - 2 juin 2005 à 16:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31253-dll-avec-nasm-et-alink

sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
2 juin 2005 à 16:03
Il faut utiliser math.lib. Apparemment Ibroman a reussi a le generer grace à dlltool. Ensuite ça doit être un import "math.lib"
Loadlibrary ça marche aussi mais c'est plus lourd.

quoique je viens de jeter un oeil ds les samples pour declarer ils utilisent
EXTERN MessageBoxA
IMPORT MessageBoxA user32.dll

Essaie et dit moi quoi. pour les 3 arguments tu ne doit pas t'en soucier l'os s'occupent de tout.
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
2 juin 2005 à 15:35
Bonjour,

J'ai utilisé la dll math.dll du Zip d'IBROMAN en l'appelant à partir d'un programme en visual basic et tout se passe bien. Je souhaiterais pouvoir l'appeler à partir d'un programme Win32 écrit en asm (j'utilise Nasm et Alink). Je n'arrive cependant pas à le faire. Comment appelle-t-on un dll à partir d'un programme asm. J'ai essayé la fonction LoadLibraryA du kernel32 mais il me retourne une valeur nulle. J'ai cependant indiqué le chemin complet où j'ai placé la dll recherchée.
Est-ce la façon de procéder ou suis-je à côté de la plaque ?
Quelqu'un aurait-il un exemple d'appel de dll dans ce contexte ?

PS SIBI12 m'a parlé des 3 arguments d'appel de dll
mais je ne sais pas s'ils interviennent à ce niveau.
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
25 mai 2005 à 16:57
Les 3 arguments sont fourni pas l'OS effectivement. ça se passe au moment ou la dll est chargé en mémoire.

Regarde dans mes sources, il doit y avoir un code pour recuperer le cpuid du processeur. C'est pile ce que tu cherche. Mais ce n'est pas un ActiveX donc je ne sais pas si on peux l'utiliser en VBA. il faut essayer
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
25 mai 2005 à 16:48
Bonjour SIBI12,
Si je me suis interessé aux dll c'est pour pouvoir les appeler à partir de projets VBA ou à partir de programmes Win32 que je souhaite créer dans le futur. J'ai bien vu que le langage asm n'est peut-être pas le plus adapté pour cet usage mais je ne souhaite pas (pour l'instant) me lancer dans l'apprentissage du langage C.
Je suppose que les 3 arguments en question sont passés lors du chargement de la dll (non visibles dans le projet VBA).
Je suppose que ces paramètres doivent être indiqués en clair lors de l'appel de la dll par un programme W32. Si tu as des exemples d'appels de dll par un programme assembleur - et sans doute de libération de la dll, je suis preneur.
Merci
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
20 mai 2005 à 14:59
MOV eax, 1 veux dire qu'on retourne la valeur 1 (Et donc tu recuperera cette valeur au moment de l'import de la dll en C ou en VB par exemple) qui signifie qu'il n'y a pas eu d'erreur.

On dépile 12 octet simplement parce que le système fournit 3 arguments à une fonction dllmain. En C voilà le prototype d'une fonction dllmain.

BOOL APIENTRY DllMain ( HINSTANCE hinst, DWORD raison, LPVOID reserv )

Je pense que tu devrais t'interressé au C avant de passé à de l'assembleur sous win32. l'assembleur n'est qu'un langage, win32 est une plateforme. C'est déjà pas simple de comprendre les mécanisme à la base de la plateforme... si tu dois comprendre en meme temps les "protocoles" de ces mécanisme tu va avoir du mal à t'en sortir. j'entend par protocole les différents passage de paramètres possible, le fait de retourner les valeur dans eax, les registre qui sont modifié lors d'appel de fonction, la signification des valeur de retour,...
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
20 mai 2005 à 09:15
Bonjour IBROMAN.
J'ai décortiqué les sources en asm et la dll pour comprendre comment ça marche. J'ai bien retrouvé les morceaux de programmes (assemblage des différents modules). Peux-tu cependant m'expliquer le rôle du point d'entrée dans la dll et de cette partie du code

..start:
dllstart:
mov eax,1 ;pourquoi mettre 1 dans eax ?
ret 12 ;pourquoi dépiler 12 octets ?

Merci d'éclairer ma lanterne
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
18 mai 2005 à 16:07
Je débute en assembleur (je commence tout juste les programmes W32 exe). Je souhaitais connaitre la façon de créer des dll avec les outils dont je dispose (Nasm et alink)car je ne connais pas le C et ses variantes. La source d'IBROMAN possède les qualités suivantes (pour moi) :
- être écrite dans un langage que je comprend (sans macro qui complique la compréhension)
- les fonctions sont simples et le code est court
- les instructions sont commentées
- figurent également les instructions de compilation.

Je souhaitais savoir comment effectuer le passage de paramètres entre un programme de haut niveau (VB) et l'assembleur. C'est chose faite
En résumé c'est la source qu'il me fallait
cs_ibroman Messages postés 26 Date d'inscription lundi 12 août 2002 Statut Membre Dernière intervention 17 juin 2005
8 mai 2005 à 23:21
Enfin j'ai trouvé une bonne doc sur "DLLTOOL", il ma généré mon fichier manquant "math.lib".
Ca marche, et j'ai ajouté un exemple d'utilisation en CPP.
super ;-)
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
8 mai 2005 à 17:51
Il faudrait essayer un import directement sur la dll mais ca m'etonnerait. Sinon via les API LoadLibrary et GetProcAdress

DLLTOOL ? connais pas :-(
cs_ibroman Messages postés 26 Date d'inscription lundi 12 août 2002 Statut Membre Dernière intervention 17 juin 2005
8 mai 2005 à 17:32
tu a raison, c'est la le problème !!!
ALINK ne génère pas ce fichier "LIB" en meme tant qu'il génère ma "DLL". Je pense qu'il faut passer par d'autres techniques pour l'obtenir mais je ne sais lequels !!!???
"DLLTOOL.EXE" peut etre? comment l'utiliser? trop compliqué ;-)
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
8 mai 2005 à 17:19
tu doit créer un fichier .lib et l'importe en C++ (imports "math.lib"). Je ne suis pas sur que ca fonctionne avec la dll. et puis il te faut mettre le prototype de la fonction avec un extern devant.

Je ne suis pas trop sur de ce que j'avance si quelqu'un peux confirmer..sinon google est ton ami ;-)
cs_ibroman Messages postés 26 Date d'inscription lundi 12 août 2002 Statut Membre Dernière intervention 17 juin 2005
7 mai 2005 à 15:52
J'arrive a utiliser "math.dll" dans un exécutable VB, C# mais pas en C. Si quelqu'un a une idée, je vous écoute ;-)
Rejoignez-nous