begin process at 2010 03 19 01:23:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriels

 > CRÉATION DE DIFFÉRENTS EXÉCUTABLES AVEC NASM ET ALINK

CRÉATION DE DIFFÉRENTS EXÉCUTABLES AVEC NASM ET ALINK


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriels Classé sous :nasm, alink, dll, coff, omf Niveau :Débutant Date de création :14/04/2006 Date de mise à jour :18/04/2006 09:47:15 Vu / téléchargé :4 697 / 544

Auteur : Nasman

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cette source est sans doute à ranger du côté tutoriels. Elle décrit quelles options de compilation à utiliser pour obtenir les différents formats utilisables pour Dos ou Windows. Ceci est illustré par un exemple bateau très simple.

En dehors des différents formats de fichiers obtenus, on trouvera les différents modes d'importation possibles et la création des sections IMPORTS et imports (noter la casse).

Ceci est un complément par rapport à une de mes précédente source


 Conclusion

Pour la création de dll je n'ai pas trouvé de façon avec Nasm, Alink et alib de créer une dll utilisable en compilant au format COFF Windows. Pour indiquer le nom de fonctions à exporter il faut peut être créer un fichier.def mais ensuite ?
Si vous connaissez un truc.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

18 avril 2006 09:47:15 :
Rajout de la méthode d'appel d'une dll via les API LoadLibrary GetProcAddress

 Sources du même auteur

Source avec Zip REPRÉSENTATION D'UNE SPHÈRE EN 3D (FLAT SHADING)
Source avec Zip Source avec une capture PROGRAMME DE VISUALISATION ET D'ANALYSE SPECTRALE DE FICHIER...
Source avec Zip CRÉATION DE GRAPHIQUES AVEC LES API WINDOWS
Source avec Zip EXEMPLES SIMPLES DE FICHIERS ÉCRITS AVEC NASM
Source avec Zip DLL EFFECTUANT UNE TRANSFORMÉE DE FOURIER RAPIDE

 Sources de la même categorie

Source avec Zip FLOATTOHEX CODE DE BRUNEWS RETRENSCRIS EN ASM PAR MOI par quoi
Source avec Zip [TUTO]PRISE EN MAIN ET CRÉATION DE .EXE À L'AIDE D'UN DÉBUGU... par rt15
Source avec Zip FPU SAMPLE 2. par tomart2005
Source avec Zip STARFIELD, SPHERE, CUBE, ROTATION 3D ET 2D EN UTILISANT LE F... par tomart2005
Source avec Zip REPRÉSENTATION D'UNE SPHÈRE EN 3D (FLAT SHADING) par Nasman

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DLL ALGORYTHME DE RECHERCHE DE CHEMIN EN A STAR, A*, FASM par Devnix
Source avec Zip Source avec une capture LIVE CD OMF par patatalo
BIBLIOTHEQUE POUR LE 8086 par flory_
Source avec Zip [LINUX] LIRE CLAVIER ET ECRIRE CONSOLE par sheorogath
Source avec Zip Source avec une capture PROGRAMME DE VISUALISATION ET D'ANALYSE SPECTRALE DE FICHIER... par Nasman

Commentaires et avis

Commentaire de BLUEBIBUBBLE le 15/04/2006 09:12:07

Hugh Nasman,

Pour créer une DLL avec MASM (à adapter pour NASM):



c:\masm32\bin\ml /c /coff source.asm
c:\masm32\bin\link /dll /DEF:source.def source.obj

Le fichier .def doit contenir le nom de la dll et le nom des procédures exportées:

LIBRARY NomLib
EXPORTS Procedure1
EXPORTS Function2
EXPORTS Sub3


Le fichier .asm doit contenir DLLMain:

                .CODE
DLLMain PROC p1,p2,p3     ;Params DWORD (par défaut)
mov eax,1
ret
DLLMain ENDP
                ...
                END DLLMain

Pas besoin des directives GLOBAL, EXPORT, EXTERN ou IMPORT!

Commentaire de Nasman le 18/04/2006 08:45:51

Bonjour BLUEBIBUBBLE,

Le problème auquel je suis confronté c'est que alink ne semble pas accepter les fichiers .DEF - du moins je n'ai pas trouvé le moyen. La définition des fonctions exportées doit pouvoir se faire de deux façons:
- au niveau du programme en assembleur (directive export de Nasm - uniquement acceptée en format OMF)
- lors de l'éditions des liens avec une déclarations des fonctions exportées dans un fichier annexe (.DEF). alink ne le permettrait pas ?

Si quelqu'un a un tuyau...

Commentaire de Oeil_de_taupe le 25/09/2006 22:48:50


Bravo pour cette source!

Elle m'a énormément aidé parce que je bloquais un peu sur le chapitre 6-7-8 de la doc NASM. J'ai juste deux petites questions parce que je ne suis pas sûr d'avoir bien compris.

Pourquoi utilises-tu "USE16" et "USE32" lorsque tu ne passes pas par des fichiers objet? Parce que selon la doc de NASM ces deux directives ne peuvent être utilisées que pour la création de fichier objet (je crois que c'est le seul format de fichier qui permettent de mêler 32 et 16 bits). Idem pour le "CLASS=". Ce qui est intriguant c'est que ça compile...


Et autres question peut-être plus importante. J'ai lu des dizaines de pages sur l'assembleur, suivi plusieurs tutorials mais je ne comprends toujours pas. Quel est la différence entre un programme 16 bits et un programme 32 bits?
Pour moi, la différence était simple: les programmes 32 bits utilisent les registres étendus (EAX
, EBC, ECX, EDX, EDI, EBP, ESS...) et les 16 bits se cantonnent aux AX/BX/CX/DX/BP... Une autre personnes dans un forum a dit: le 32 bits est utilisés par le mode protégé et le 16 pour le mode réel.

Et voilà que je vois dans le doc de NASM: "You do not need to specify BITS 32 merely in order to use 32-bit instructions in a 16-bit DOS program; if you do, the assembler will generate incorrect code because it will be writing code targeted at a 32-bit platform, to be run on a 16-bit one."

Mais alors? Comment peut-on "trier" entre programmes 16 bits et programmes 32 bits?

Commentaire de Nasman le 26/09/2006 09:30:22

Bonjour OEIL_DE_TAUPE,

Je n'ai pas essayé toutes les types de fichiers avec Nasm mais je vais tenter de répondre à tes questions.

A ma connaissance, le format objet est le seul qui permette d'exporter des noms, que ce soit des noms de sections ou des noms de fonctions ou variables.

La directive USE32 ou BITS 32 a pour but d'indiquer à Nasm que le code doive être interprété comme du 32 bits. Pour certaines instructions c'est chose évidente (exemple mov eax,ecx), pour d'autres la taille n'est pas indiquée (LODSB).
En 16 bits cette instruction chargera al avec le contenu de DS:SI et DS:ESI en 32 bits.
Par défaut Nasm compile en 16 bits. Si tu veux éxécuter une instruction 32 bit dans une section 16 bits tu peux forcer le mode 32 bits pour l'instruction en ajoutant le préfixe a32 (préfixe 0x66).
Ainsi en 16 bits pour charger al avec le contenu de DS:ESI tu feras:
a32 LODSB qui sera codé en 0x66 0xAC

Pour les instructions 32 bits implicites le a32 n'est pas nécessaire dans le fichier source mais un préfixe sera ajouté

Exemple (Pas de déclaration - mode 16 bits par défaut)
mov ax,32 est codé en B8 20 00 et
mov eax,32 est codé en 66 B8 20 00 00 00 (66 indique que l'on change de mode)

Avec bits 32 ces deux instructions seront codées
mov ax,32 est codé en 66 B8 20 00 et
mov eax,32 est codé en B8 20 00 00 00 (pas de 66 car l'instruction correspond au mode de la section)

Ainsi l'utilisation d'instructions 32 bits ne signifie pas que le programme est en 32 bits, cela indique seulement que le microprocesseur necessaire est au moins un 386.
Avec Nasm, s'il n'y a pas de directive BITS XX alors le programme est en 16 bits. Avec l'exécutable si on a 66 B8 20 00 00 00
celà indique que l'on charge un registre 32 bits (valeur 0x00000020)mais avec changement de mode (66) ainsi le mode de la section est de 16 bits.

J'espère t'avoir éclairé

A+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

nasm coff symboles [ par patatalo ] salut, y-a-t'il une option avec Nasm qui permette de supprimer les symboles des structures,des equates et des labels locaux en&nbs Probleme avec NASM et ALINK [ par epineurien ] Bonjour ! Voilà ma question : Je commence à utiliser NASM mais j'ai quelques problemes avec le linker ; Alink. Avec ce code (issu de la doc. de NASM [Nasm - Alink - WIn32] Probleme avec SetWindowsHookEx [ par jean84 ] Salut à tous ;)Je me permet de poser une chtite question car après avoir passé du temps à chercher la réponse à mon problème, bah j'ai toujours pas tr Quel est l'assembleur le plus rapide ? [ par epineurien ] Salut à tous !Une nouvelle question , suite à quelques infos trouvées sur le net ...J'utilise MASM32 , mais de nombreux sites dises qu'il produit un c Arguments d une fonction dans une DLL [ par MOUSSAOUIAAZIZ ] Salut;J'aimerais savoir si il est possible de trouver la liste d'arguments variables d'une fonction dans une bibliothèque de liens dynamiques (DL DLL Load Comment ? [ par belette321 ] Je me demandais comment je fait pour charger un DLL. Il parrait que sa prend pas plus que quelque ligne alor merci d'avence ... [NASM avec RadASM] Erreur lors du Link : "File not found: test.res" [ par orax ] Bonjour, j'essaie de débuter la programmation en assembleur, pour cela j'ai installé RadASM et NASM. Le problème est que quand je crée un nouveau proj assembleur [ par calamsro ] j'ai commencé à étudier le langage machine l'assembleur que j'utilise est nasm mais manifestement la plupart des sources asm proposées sont faites pou Afficher le compilateur NASM [ par cybarre ] Le lancement de nasmw.exe ne donne rien sous XP.Merci de m'aider dans mes premiers pas.  [MASM32] DLL export en C [ par frobinet ] Bonjour, Pour créer un PlugIn, il faut que je transforme une dll en appel de convention stdcall vers un appel de convention en C. j'ai remplace


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 11,528 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales