IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Débuter en Assembleur 64 bits


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2019
    Messages : 9
    Points : 12
    Points
    12
    Par défaut 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.

  2. #2
    Invité
    Invité(e)
    Par défaut Assembleurs
    Voici quelques conseils:

    • 64 bits ou 32 bits ? : tu trouveras peu de documentation sur l’assembleur 64 bits. Alors, si tu n’as pas d’impératif particulier, reste sur le 32 bits quitte à évoluer plus tard vers le 64 bits. Évite surtout le 16 bits qui appartient à la Préhistoire.
    • Si tu veux faire indifféremment du 32 ou du 64 bits, il y a l’excellent assembleur GoAsm de Jeremy Gordon et Wayne J. Radburn qui combine astucieusement les deux. J’en ai traduit l’énorme documentation en français. Tu la trouveras sur ce site avec, si tu le souhaites, une version PDF.
    • Évidemment, il y a aussi le vénérable Masm de Microsoft. Pour le 32 bits, soit tu te contentes d’une version relativement ancienne, auquel cas tu la charges à partir du forum Masm de Steve Hutchinson (version 6.11), soit tu souhaites la toute dernière version et il te faut installer Visual Studio 17 sur ton micro afin de récupérer Masm (version 14, je crois).
    • Si tu veux Masm 64 bits, il s’agit en fait de ML64.EXE. Tu ne peux l’obtenir qu’après l’installation de Visual Studio évoquée précédemment. Mais attention à un détail de première importance : ML 64.EXE à été dépouillé de pratiquement toutes les directives d’assemblage de son homologue 32 bits. Entre autres, la directive INVOKE et les directives d’assemblage conditionnel sont passées à la trappe. Pour autant, Steve Hutchinson propose un imposant pré-processeur qui permet de combler ces insuffisances et d’aller même au-delà. Mais sa prise en main n’est pas chose facile.
    • Il n’y a pas que Masm et GoAsm. Fasm et Nasm, par exemple, implémentent le 64 bits mais je ne les connais pas personnellement.


    Côté documentation, voici quelques références :
    • les 35 tutoriels d’Iczelion en anglais. Voir Tutos d'Iczelion
    • La documentation française de GoAsm (évoquée précédemment). Voir Doc GoAsm
    • Un document en français sur le pré-processeur Masm 64 bits (je te l’enverrai au besoin sous sa forme provisoire)
    • Le livre « Programming Windows » de Charles Petzold dans son édition 5 qui est une référence absolue sur la programmation de l’interface GUI. C’est du langage C, sans la moindre ligne d’assembleur, et en anglais. Existe en format numérique sur le Net.


    Téléchargement du Masm 32 SDK
    Téléchargement du Masm 64 SDK (pré-processeur de ML64.exe et utilitaires). Aller sur Masm Forum, section "MASM64 SDK" puis "New Install"

    J'ai bien conscience de ne faire que survoler le sujet mais je me tiens à ta disposition si tu souhaites être éclairé sur des points précis. Cela dit, ne sous-estime pas le sujet. L'assembleur est un langage comme un autre. Il est donc difficile, sinon impossible, de se contenter d'une imprégnation cosmétique.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2019
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Je vois en tout cas que le simple fait de faire un "hello world" en assembleur est un peu la croix et la bannière. J'ai pensé egalement squatter stackoverflow, je suis anglophone friendly. Je pense que Goasm est un superflux par rapport à ce que je recherche à faire en asm. Je prefère me concentrer sur MASM dans un premier temps. Oui il n'y a pas l'air d'avoir beaucoup de documentation en 64bits. Je pensais bien que le 16bits c'etait la préhistoire, peut-être utile sur des micro-controller avec peu de mémoire, mais je doute réellement.

    Faire de l'ASM 32 sur un ordinateur et processeur 64 ne pose donc pas de problème?
    Ma version de MASM64 est bien installé avec visual studio, mais le chemin d'accès est bien complexe:
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64

    J'ai quelques problème pour y acceder en ligne de commande avec cd sur powershell, il m'indique une erreur à la parenthèse (x86). (il le prend comme un script?) Je ne comprend pas en cmd cela passe bien.

    Le chemin d'accès de ml.exe pour du x86 me donne:
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86

    J'ai trouvé cette doc qui ressemble plus à ce que je cherche à faire en asm sur du shellcode:
    Faire du shellcode sous windows

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 437
    Points : 43 078
    Points
    43 078
    Par défaut
    Faire de l'ASM 32 sur un ordinateur et processeur 64 ne pose donc pas de problème?
    Aucun, tu as certainement encore des applis en 32 bits sur ta machine. Le seul problème est au niveau des drivers. Tu ne peux pas utiliser un driver 32 bits sur un OS 64 bits. Et un CPU en 64 bits ne pourra pas faire fonctionner une appli 16 bits, sauf si il tourne sur un OS 32 bits et que le 64 bits n'a donc pas été activé (restriction lié au cpu).

    Pour faire un Hello World, (a reste accessible en appelant les API systèmes, ce que tu es de toute façon obligé de faire, les OS actuels ne te permettant pas un accès direct au matériel. Après ça n'a pas beaucoup d’intérêt par rapport le faire en C.

    MASM est l’assembleur Microsoft, tu peux en utiliser d'autres comme NASM. MASM a une syntaxe particulière.

    Pour le problème de chemin, attention à l'espace en Program Files et (x86), il faut mettre le chemin entre guillemets.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par tr1v1al Voir le message
    Je pensais bien que le 16bits c'etait la préhistoire, peut-être utile sur des micro-controller avec peu de mémoire, mais je doute réellement.
    Euh un peu du mal à te suivre le 16 bits sur x86 n'est plus utilisé voir obsolète, sinon sur microcontrôleur (comme les arduino) c'est un proc 8 bits donc c'est utile et ça date pas de la préhistoire !
    Sinon il ne faut pas considérer qu'un proc 8 bits est moins évoluer qu'un proc 64 bits, si on reprend l'AVR Atmel , c'est une architecture plus récente que le x86 ,du coup il peuve se permettre d'avoir 32 registres généraux
    Alors que le x86-32 bits n'a que 8 registres , et le x64 16 registre généraux , mais dans les fait le x64 souffre de la compatibilité et par exemple pour certaine instruction le registre RAX/EAX/AX sert encore d'accumulateur , alors que c'est un truc qui a complémentent disparu sur les autres proc depuis les années 1990-1995...
    Bref c'est une grave erreur de considéré tout les proc 8 bits dans le meme sac et tout les proc 32 ou 64 bits pareil , il y'a un monde entre un proc 8 bits comme le 6502 ou le z80 et un proc moderne 8 bits comme AVR ATMEL.

    Citation Envoyé par tr1v1al Voir le message
    Faire de l'ASM 32 sur un ordinateur et processeur 64 ne pose donc pas de problème?
    Je rajouterai que c'est justement le but du x64 (initié par AMD ) , c'est d’être rétrocompatible avec un proc vieux de 40 ans
    Intel avait tenté de faire un vrai proc 64 bits tout en se débarrassant de la compatibilité assez lourde , c'est le proc Itanium , une vrai merveille ce proc (est assez moderne sur pas mal de point) , mais il n'a pas marché

  6. #6
    Invité
    Invité(e)
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Dernière modification par Invité ; 20/06/2019 à 18h47.

Discussions similaires

  1. L'assembleur 64 bits
    Par tulipebleu dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 19/04/2010, 20h27
  2. Intégrer un programme en Assembleur 16 bits en C++
    Par Zarokk dans le forum Assembleur
    Réponses: 3
    Dernier message: 16/05/2007, 09h40
  3. Assembleur 32 bits
    Par monromero dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 30/04/2007, 16h33
  4. Débuter en Assembleur
    Par Zenol dans le forum Assembleur
    Réponses: 26
    Dernier message: 02/01/2006, 17h01
  5. Débuter l'Assembleur sous Windows XP
    Par Bibouda dans le forum Assembleur
    Réponses: 2
    Dernier message: 03/12/2005, 02h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo