Débuter en Assembleur 64 bits
Alors bonsoir,
Je m'interesse à la programmation assembleur pour aller plus dans le détail pour la gestion de la mémoire après que je sois en cours d'apprentissage en C++.
Je fais ma petite recherche d'info sur le langage et je m'y perds.
De ce que j'ai pus lire il faut passer par MASM sur windows 10, rechercher le fichier ml64.exe à l'install des outils visual studios. Mais j'avoue que cela ne m'aide pas à lancer la ligne de commande pour compiler un programme en .asm
Je m'appuie sur cette page, plutôt mal traduit de microsoft https://docs.microsoft.com/fr-fr/cpp...e?view=vs-2019
De plus je recherche un tuto pour débutant sans une explication complexe des différents registres, architectures, mais juste pour le faire marcher sur le pc dans un premier temps pour voir si j'ai bien compris la compilation avec un programme basic hello world.
Si vous avez plus d'information en sécurité informatique, l'execution de shellcode dans le but de travailler avec des binaires sur de l'asm.
Un programme simple sous Masm 32 bits
Ne cherche pas à brûler les étapes. Si tu vas tout de suite sur le 64 bits, tu vas te planter magistralement et tu n’auras pas l’expérience nécessaire pour t’en tirer lorsque tu rencontreras un problème. Et, je le rappelle, il y a très peu de doc sur le sujet. Grâce à VS 2017, tu as en ta possession les dernières versions de ML.exe et ML64.exe. Garde-les de côté pour l’instant. Elles te serviront plus tard.
Dans l’immédiat, charge le Masm 32 SDK. Tu vas à cette adresse. Tu choisis DOWNLOAD puis tu cliques sur US Site 1. Le site va te proposer de télécharger le fichier masm32v11r.zip. Quand tu ouvres ce dernier, tu as un classique install.exe sur lequel tu double-cliques pour lancer l’installation.
Cet installateur va te créer un répertoire Masm32 sous la racine et y installer tout un tas de choses : l’assembleur, le linker, l’éditeur de ressources, des bibliothèques diverses et variées, des exemples et des fichiers d’entête extrêmement importants, dont le fondamental windows.inc. Les versions de l’assembleur, du linker et de l’éditeur de ressources sont anciennes mais te suffiront largement. Tu les trouveras dans le répertoire bin. Plus tard, tu pourras les écraser par celles que tu as téléchargées via VS 2017.
Maintenant, reporte-toi aux tutos d’Iczelion. Puisque l’anglais ne te pose pas de problème, lis attentivement le Tuto1 et fais l’exemple du Tuto 2.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| .386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
MsgBoxCaption db "Iczelion Tutorial No.2",0
MsgBoxText db "Win32 Assembly is Great!",0
.code
start:
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end start |
Tu crées un sous-répertoire AA-perso à examples (AA pour le placer en tête.) Pour ne pas trop t’embêter après avec les répertoires, tu copies également ML.exe, LINK.exe et mspdb50.50.dll du répertoire bin dans AA-perso. Maintenant, tu fais un copier/coller du script ci-dessus et tu le colles dans le Bloc-Notes. Tu le sauvegardes sous c:\Masm32\examples\perso\ avec le nom MsgBoxTest.asm. Tu fermes le Bloc-Notes.
Maintenant tu ouvres à nouveau le Bloc-Notes et tu vas maintenant créer le fichier bat qui va t’exécuter tout ça automatiquement. Tu copies le texte suivant :
Code:
1 2 3 4
| set appname=MsgBoxTest
ml /c /coff %appname%.asm
link /SUBSYSTEM:WINDOWS %appname%.obj
pause |
Ça va automatiser ton process assemblage/ édition de liens. Tu nommes ce fichier MsgBoxText.bat, puis tu le sauvegardes sous c:\masm32\
Passons maintenant à l’action. Tu double-cliques sur MsgBoxText.bat et tu vas voir le process se dérouler sous tes yeux. Voici ce que l’écran affiche :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| C:\masm32\examples\AA-perso>set appname=MsgBoxTest
C:\masm32\examples\AA-perso>ml /c /coff MsgBoxTest.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: MsgBoxTest.asm
***********
ASCII build
***********
C:\masm32\examples\AA-perso>link /SUBSYSTEM:WINDOWS MsgBoxTest.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
C:\masm32\examples\AA-perso>pause
Appuyez sur une touche pour continuer... |
Dès lors, ton programme MsgBoxTest.exe est créé avec une taille de 2560 octets. Si tu double-cliques dessus, tu obtiens l’affichage d’une boîte de message.
Alors, tu vas te dire que ça fait beaucoup de travail pour si peu. C’est un faux débat. Une fois que tu as écrit quelques programmes de base, tu procèdes assez rapidement par copier/coller et quelques rectifications à la marge.
PS : plutôt que de t’escrimer sur Stack Overflow (dont le haut niveau est incontestable mais dont les réponses sont parfois aléatoires) je ne saurais trop te recommander le Masm Forum qui est fréquenté par d’authentiques grosses pointures de l’assembleur.