Flux rss
Collection CommentCaMarche.net

Compiler un programme assembleur avec Nasm

Publié par kilian, dernière mise à jour le mardi 18 mars 2008 à 19:44:03 par kilian



Nasm est un logiciel assembleur libre pour architecture x86. On peut le trouver pour plusieurs systèmes d'exploitation comme Linux ou Windows par exemple.
Un assembleur permet d'assembler du code assembleur. (sic)

Hélas, assembleur signifie deux choses
  • le langage "assembleur" qui permet de programmer en langage machine à partir de mnémoniques
  • le logiciel qui va transformer votre code en langage machine directement compréhensible par votre processeur.


Cette astuce ne vous apprendra pas à programmer avec Nasm mais à créer un executable sous Linux et Windows à partir d'un code source destiné à Nasm.

Avec Linux


Etape 1. Créer un fichier source


Vous n'avez pas besoin d'un éditeur spécifique pour créer un fichier source destiné à Nasm. Vous pourriez éventuellement utiliser un éditeur qui supporte la coloration syntaxique de l'assembleur mais il n'y en a pas, à ma connaissance, qui supporte la syntaxe de nasm.
Vous pouvez donc choisir gedit, kwrite, xemacs etc...

Lorsque vous enregistrez votre fichier source, donnez lui l'extension .asm

Etape 2. Assembler le fichier source


Pour cette étape, vous aurez besoin du logiciel nasm installé sur votre machine. Si vous êtes sous Debian ou Ubuntu, il suffit de taper la commande
sudo apt-get install nasm


Si vous avez une autre distribution Linux, il vous faudra utiliser le gestionnaire de paquet de votre distribution (exemple urpmi, yum, emerge etc...) ou bien compiler nasm en téléchargeant l'archive depuis le site officiel.

Passons maintenant à l'assemblage de votre fichier source.
Rendez vous en ligne de commande dans le repertoire ou se situe votre fichier source que nous allons appeler test.asm pour l'exemple. Voici la ligne à taper:
nasm -f elf test.asm

Ceci créera un fichier nommé test.o dans le repertoire courant. Ce fichier n'est pas encore exécutable, ce n'est encore qu'un fichier objet, c'est à dire un fichier qu'il faut lier avec les bibliothèques dont il dépend comme par exemple la libraire standard libc.

Etape 3. Création de l'executable


Maintenant que nous avons notre fichier objet nommé test.o nous allons créer notre executable.
Deux cas se présentent ici:
  • Votre programme débute avec une procédure nommée "_start". Celà signifie que votre programme possède son propre point d'entrée sans utiliser de fonction main. Ca ne change pas grand chose, toutefois vous aurez besoin d'utiliser la commande "ld" pour créer votre executable:

ld test.o -o test
  • Votre programme débute avec une procédure nommée "main". Vous aurez donc besoin d'utiliser gcc pour créer votre executable:

gcc test.o -o test


Voilà notre executable est créé, il s'appelle test et se situe dans le repertoire courant.

Etape 4. Execution du programme


Pour executer notre programme appellé "test", il suffit de taper cette commande:
./test

Vous pouvez également utiliser un déboggeur pour observer l'execution. Pour celà vous pouvez utiliser gdb qui s'utilise en ligne de commande. Si toutefois vous voulez un débogeur plus visuel, il existe des interfaces graphiques qui utilisent gdb en arrière plan comme par exemple Insight.

Avec windows


IMPORTANT: Sous windows la convention d'appel de paramètre n'est pas la même, la fonction appellée doit nettoyer elle-même la pile. De même, le main n'existe pas sous windows, il faut le remplacer par WinMain.
Si votre point d'entrée est _start ou main, il faudra changer celà en "_WinMain@16" et changer le "ret" à la fin de cette procédure d'entrée en "ret 16".
Exemple d'un fichier source correct sous Windows:
section .text
	global _WinMain@16

_WinMain@16:
	mov eax, 0
	ret 16	

Etape 1. Installer les logiciels nécessaires


Nous allons d'abord installer nasm. Allez sur la section de téléchargement de CCM où bien sur le site officiel dans la section download (choisissez la version Win32 binaries). Gardez l'archive dans un coin, on s'en servira plus tard.

L'étape la plus délicate va être d'installer MingW qui est un environnement de développement libre pour windows.
A cette adresse, choisissez la dernière version de MinGW. Aujourd'hui c'est la version 5.0.0.
Executez cet installeur. S'il vous propose de mettre à jour votre installeur dés le début, dites non. Laissez toutes les options selectionnées par défaut puis attendez la fin de l'installation.

A présent, nous allons insérer nasm dans l'environnement de développement MingW, comme des sauvages mais avec de la délicatesse.
Décompressez l'archive de nasm, vous devriez obtenir un dossier contenant, entre autres, un fichier nommé nasm.exe
Copiez ce fichier dans le repertoire C:\MinGW\bin

Etape 2. Créer un fichier source


Tout comme pour Linux, il n'y a pas besoin d'utiliser un éditeur spécifique pour créer un fichier source destiné à Nasm.
Vous pouvez utiliser par exemple le Bloc Note mais faites attention, le bloc note de windows a tendance à rajouter l'extension .txt au fichiers qu'il crée. Pour lever toute ambiguité, je vous recommande chaudement d'afficher les extensions de vos fichiers.
Evitez en tout cas des traitements de textes comme Word ou WordPad qui risquent d'enregistrer votre fichier dans un format indésirable.

Si vous le souhaitez, vous pouvez également utiliser un éditeur qui utilise la coloration syntaxique pour la syntaxe de nasm comme par exemple NasmEdit IDE (gratuit).

Dans tous les cas, je vous conseille de donner l'extension .asm à votre fichier source.

Etape 3. Assembler le fichier source


Ouvrez l'interpréteur de commande de windows (tapez cmd.exe dans "Executer" du menu démarrer ou directement "cmd" dans la barre "recherche" du logo windows sous Windows Vista.
Avec cet interpréteur de commande, vous devrez vous rendre dans le dossier qui contient votre fichier source avec la commande "cd".
Une fois que vous êtes dans ce repertoire, assemblez votre fichier source (appellons le test.asm) avec cette commande:
nasm -f win32 test.asm -o test.o

Vous avez à présent un fichier objet qui n'est pas encore executable, mais il le sera bientôt, passons à la dernière étape.

Etape 4. Création et execution du programme


Toujours depuis votre fenêtre de commande, une dernière commande à taper pour créer l'executable:
ld test.o -o test.exe

Si vous avez un problème avec cette commande, c'est que vous avez peut être oublié le lire le point important que j'ai noté plus haut au début de la section "Pour Windows".
Pour tester votre executable, tapez simplement "test" dans la fenêtre de commande. Si vous voulez un debugger pour visualiser de plus près ce qui se passe, utilisez OllyDbg, c'est un excellent debuggeur.

Résultats pour Compiler un programme assembleur avec Nasm

Programme assembleur de microprocesseur 8085 (Résolu) Bonjour, je cherche à télécharger le programme assembleur de microprocesseur 8085 mais j'ai rien trouver, parce que j'ai besoin de ce programme pour mes étude, est-ce qu'il y a quelqu'un qui peut m'aider merci d'avance www.commentcamarche.net/forum/affich-4936406-programme-assembleur-de-microprocesseur-8085
Programmation assembleur (Résolu) Bonjour, Je n'ai pas compris à quoi la programmation assembleur servait vraiment. Est-ce que quelqu'un pourrait me donner un exemple d'un programme fait en assembleur ? :) www.commentcamarche.net/forum/affich-8421183-programmation-assembleur
Reboot en mode Normal apres 10/60 minutes (Résolu) Bonjour, Qui lit vos réponses: moi, developpeur electronique embarquée (electronique digitale et programmation assembleur C). Je travaille sous Linux, et j'ai Win XP a la maison. Qui se sert de l'ordi: moi, mais aussi ma femme (utilisatrice... www.commentcamarche.net/forum/affich-4812966-reboot-en-mode-normal-apres-10-60-minutes

Résultats pour Compiler un programme assembleur avec Nasm

Interfacer du code assembleur et du CInterfacer du code assembleur et du C Introduction Appeler du code assembleur écrit dans un fichier source externe Avec Nasm (x86 uniquement) Compilation/Execution sous Linux Avec Gcc (multiplateforme) Introduction Si, à tout hasard,... www.commentcamarche.net/faq/sujet-8257-interfacer-du-code-assembleur-et-du-c
Exercice assembleur x86 occurence d'un caractèreIntroduction Notions abordées dans cet exercice Enoncé Corrigé Explication Introduction Ce petit exercice d'assembleur vise les architectures x86 (Processeurs Intel et Amd 32 bits) et utilise la syntaxe de Nasm, un assembleur libre,... www.commentcamarche.net/faq/sujet-10330-exercice-assembleur-x86-occurence-d-un-caractere
Liens utiles assembleur x86Voici quelques liens utiles pour l'assembleur x86. Le but étant de compiler des documents pertinents autant pour ceux qui débutent que pour ceux qui sont à l'aise dans ce domaine. Tutoriels Références complètes Assembleur sous... www.commentcamarche.net/faq/sujet-9899-liens-utiles-assembleur-x86

Résultats pour Compiler un programme assembleur avec Nasm

Pb Compilation prog C et C++ sous Linux ?? (Résolu)Bonjour, Je développe des applications en java, les programmes que je réalises sous Linux fonctionne avec le jdk 1.5_05 de Sun. Je souhaiterais programmer en C et C++, j'ai essayé de compiler des progs "simples". ---------------------------------... www.commentcamarche.net/forum/affich-1942994-pb-compilation-prog-c-et-c-sous-linux
Programme assembleur (Résolu)hi! je n'arrive pas à comprendre l'exercice suivant: nous avons 4 nombres entiers en méroire U,V,Y et T.si la somme de 2 de ces4 nombres est egale à la somme des 2 autres on effectera cette somme à chacune des4 variables sinon on leur... www.commentcamarche.net/forum/affich-2814353-programme-assembleur

Résultats pour Compiler un programme assembleur avec Nasm

Télécharger NasmNasm est un logiciel assembleur libre et disponible sur plusieurs systèmes comme Linux ou Windows. Toutefois il ne fonctionne que sur les architectures x86. Il demande une syntaxe légère et compte donc parmi le choix de nombreux programmeurs. www.commentcamarche.net/telecharger/telecharger-34055381-nasm

Résultats pour Compiler un programme assembleur avec Nasm

Ecrire un programme en assembleurLa compilation du programme Le programme doit être saisi dans un fichier texte non formaté (c'est-à-dire sans caractères en gras, souligné, avec des polices de caractères de différentes tailles, ...) appelé fichier source. En effet,... www.commentcamarche.net/contents/asm/source.php3
Introduction à l'assembleurLes prérequis nécessaires Le langage assembleur est très proche du langage machine (c'est-à-dire le langage qu'utilise l'ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur. Ainsi il... www.commentcamarche.net/contents/asm/assembleur.php3
Les procédures en assembleurLa notion de procédure En langage assembleur, on appelle procédure un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la procédure. Cette notion de sous-programme est généralement appelée fonction dans d'autres... www.commentcamarche.net/contents/asm/procedure.php3