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.
Lire la suite
Exercice assembleur x86 nombre premier »
Publié par
kilian -
Dernière mise à jour le 16 novembre 2009 à 16:20 par marlalapocket