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 :

MASM sur Vista


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut MASM sur Vista
    Salut,

    Je voudrai savoir comment installer MASM sur Vista.
    Parce que je viens d'acheter "Assembleur x86" de Kip Irvine et il parle seulement de MASM.
    Alors c'est possible ?

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    as-tu essayé d'installer MASM32 ?

    http://www.masm32.com/masmdl.htm

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Oui, c'est celui-ci que j'ai et j'utilise.
    Avec "easy Code Masm"
    Mais avec la lib "Irvine32" ca ne marche pas.......

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Citation Envoyé par Voldemort09 Voir le message
    Oui, c'est celui-ci que j'ai et j'utilise.
    Avec "easy Code Masm"
    Mais avec la lib "Irvine32" ca ne marche pas.......
    Qu'est-ce qui ne "marche pas" exactement ? (difficile à deviner sans plus de précisions...)

    Est-ce un problème de link, ou de compilation ?

    Quel sont exactement les messages d'erreurs ?

    Est-ce que la compilation et l'édition de lien se passent bien, mais les programmes utilisant la lib en question ne fonctionnent pas ? Est-ce qu'ils plantent directement ? Y'a-t-il un message d'erreur quelconque ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Bon j'ai réussi a Assembler depuis un batch et obtenir un Module1.obj et un Module1.lst.
    Mais je peu rien linker voilà comment j'ai fait (corrigez moi svp):

    J'ai créé un batch contenant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    link32.exe Module1.obj
    cmd
    (link32.exe et Module1.obj sont dans le même dossier)

    Voil ce que le batch me renvoit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    C:\Masm615>link32.exe Module1.obj
    Microsoft (R) Incremental Linker Version 6.00.8447
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
     
    LINK32 : fatal error LNK1221: a subsystem can't be inferred and must be defined
     
    C:\Masm615>cmd
    Microsoft Windows [version 6.0.6001]
    Copyright (c) 2006 Microsoft Corporation. Tous droits réservés.
     
    C:\Masm615>
    Merci d'avance !

  6. #6
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Voici deux exemple de ligne de commande :

    (avec ML et LINK du pack MASM32, mais peu importe).

    Ici, la compilation avec ML (on compil le fichier "blabla.asm", pour obtenir "blabla.obj") :

    D:\masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"D:\masm32\Include" "blabla.asm"
    L'option /I indique le chemin des fichier *.inc.

    Une fois compilé, on donc obtient un *.obj. Il suffit de faire l'édition de lien dessus (avec link ou link32) :

    D:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPATH:"D:\masm32\Lib" /OUT:"blabla.exe" "blabla.obj"
    Le /SUSBSYSTEM peut être CONSOLE ou WINDOWS (ou autre mais plus rare). WINDOWS est utilisé généralement pour les programmes ayant un GUI.

    /LIBPATH sert à indiquer le chemin des *.lib (on peut mettre plusieurs chemins, pas besoin de coller toutes les libs au même endroit).

    /OUT sert à indiquer le nom de l'exécutable de sortie.

    En toute fin de ligne de commande pour link, on passe simplement le fichier obj obtenu à la compilation.

    Pour plus d'infos, voir sur la MSDN :

    Options de commande pour LINK

    Options de commandes pour ML

    N'hésite pas à poser des questions si ce n'est pas clair ou que tu n'y arrives toujours pas.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Mon linker contient ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    C:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPATH:"C:\masm32\Lib" /OUT:"Module1.exe" "Module1.obj"
    cmd
    Mais la console me renvoie ceci:
    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
     
     
    C:\masm32>C:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPA
    TH:"C:\masm32\Lib" /OUT:"Module1.exe" "Module1.obj"
    Microsoft (R) Incremental Linker Version 5.12.8078
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
     
    Module1.obj : error LNK2001: unresolved external symbol _ExitProcess@4
    Module1.obj : error LNK2001: unresolved external symbol _DumpRegs@0
    Module1.exe : fatal error LNK1120: 2 unresolved externals
     
    C:\masm32>cmd
    Microsoft Windows [version 6.0.6001]
    Copyright (c) 2006 Microsoft Corporation. Tous droits réservés.
     
    C:\masm32>

  8. #8
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Ah oui , je crois savoir d'où vient ce problème.

    J'utilise une forme de commande pour link qui ne donne pas le nom de bibliothèque au linker mais les passe dans le fichier .obj.

    au début de ton code source, tu dois avoir quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    .686
    .model flat, stdcall
     
    ; A mettre pour éviter les erreurs de link
    includelib kernel32.lib ; pour ExitProcess
    includelib .... ; le nom de la la lib qui contient DumpRegs
     
    .data
    ;...
     
    .code 
    start:
    ...
    Il suffit de rajouter les "includelib", ça évite de passer toutes les bibliothèques (*.lib) au linker.

    Sinon il suffit de passer les noms des libs au linker :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:9.0 /LIBPATH:"C:\masm32\Lib" /OUT:"Module1.exe" kernel32.lib blabla.lib "Module1.obj"
    Personnellement, je préfère la manière includelib.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Merci !

    Petite question de noob: Comment on bloque une console pour pouvoir voir le contenu ? En C c'est:

  10. #10
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par Voldemort09 Voir le message
    Merci !

    Petite question de noob: Comment on bloque une console pour pouvoir voir le contenu ? En C c'est:
    Le problème c'est que la fenêtre console se ferme dès que le programme se termine. Deux solutions :

    1) Tu démarres ton programme en passant par l'interpréteur de ligne de commande :

    Touche "windows" + R > tape "CMD"

    A l'invite de commande :

    C:\ > C:\foo\mon_programme.exe
    Comme ça tu pourra voir ce qui passe par le flux de sortie.

    2) Par programmation (on empêche le programme de se terminer). Il y a plusieurs solutions (kbdhit(), getch(), utiliser les APIs consoles, system(), etc.).

    Pour system(), avec MASM32, il faut utiliser le fichier d'en-tête msvcrt.inc et la bibliothèque msvcrt.lib.

    Code asm : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    comment $
     
     TestCrt.asm
     
    $
     
    include windows.inc
     
    include kernel32.inc
    includelib kernel32.lib
     
    include user32.inc
    includelib user32.lib
     
    include msvcrt.inc
    includelib msvcrt.lib
     
    .const
    CRLF equ 13d, 10d
     
    .data
    format_string	byte "%s", CRLF, 0
    message 	byte "Simple message", 0
    pause_command 	byte "PAUSE",0
     
    .code 
     
    start:
    invoke crt_printf, addr format_string, addr message
    invoke crt_system, addr pause_command
     
    ret
     
    end start

    Les fonctions courantes du C sont accessibles en les préfixant avec "crt_" (ex : crt_printf, crt_system, crt_strcat, crt_strcmp, etc.).

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Ok.

    C'est normale que:
    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
     
    TITLE Add and Subtract              (AddSub.asm)
     
     
    INCLUDE Irvine32.inc
     
    .code
    main PROC
     
    	mov eax, 10000h
    	add eax, 40000h
    	sub eax, 20000h
    	mov ebx, 10000h
    	call DumpRegs
    	crt_getch()
     
    	exit
    main ENDP
    END main
    Ne marche pas. (Désolé je début :s)

  12. #12
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    cf. ce post pour "Ne marche pas".

    Impossible de deviner ce qui ne va pas si tu ne dis pas exactement ce qui ne fonctionne pas.

    P.S : je ne vois qu'un seul include, tu n'en aurais pas oubliés par hazard ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Il (ML.exe) ne reconnait pas la sysntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Assembling: Module1.asm
    Module1.asm(14) : error A2008: syntax error : crt_getch
    Appuyez sur une touche pour continuer...

  14. #14
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    La syntaxe exacte est :

    il y a deux underscore ( _ ). La fonction getch du crt commence déjà par un underscore (_getch sur MSDN ) , donc si on préfixe avec 'crt_' ça en fait deux.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Ok, mais que j'essaie avec crt__getch() ou crt__getch, j'ai toujours la même erreur...(celle de syntaxe)

  16. #16
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Hmm, c'est de l'assembleur, pas du C

    tout assembleur syntaxe Intel :

    MASM :

    Regarde attentivement le code au point 2) du post #10 de ce fil de discussion. C'est un code complet, compilable, pour MASM32 :

    http://www.developpez.net/forums/sho...8&postcount=10

    il y a un exemple d'utilisation de printf et system avec PAUSE.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Ok. il vient de quelle .inc ou .lib "invoke crt__getch" parce que MASM ne le reconnais toujours pas.

  18. #18
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Pour tout ce qui est crt_ :

    il faut utiliser le fichier d'en-tête msvcrt.inc et la bibliothèque msvcrt.lib.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 51
    Points : 29
    Points
    29
    Par défaut
    Ca marche pas.
    Bon pas grave, j'utilise un debugeur pour voir ca.

  20. #20
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Il faut ajouter "include msvcrt.inc" et "includelib msvcrt.lib" et normalement ça devrait marcher. Ce sont des fichiers qui devraient se trouver dans le répertoire \include et \lib de MASM32 (ou quelque chose comme ça).
    Pour mettre le programme en pause je préfère faire un .bat qui appelle un programme passé en paramètre et fait un "pause > nul". Après je mets un raccourci clavier dans mon éditeur pour l'appeler en lui passant le chemin du programme que je viens de compiler. Comme ça si je l'utilise en console après je ne devrai pas appuyer sur une touche à chaque fois qu'il se termine.
    :wq

Discussions similaires

  1. email qui court sur vista
    Par loveflower dans le forum Windows Vista
    Réponses: 14
    Dernier message: 30/03/2007, 19h53
  2. probleme de compatibilité de logitech pro4000 sur vista
    Par tohiro dans le forum Windows Vista
    Réponses: 5
    Dernier message: 04/03/2007, 14h01
  3. [ntel 915] Aero sur Vista
    Par hélènasay dans le forum Windows Vista
    Réponses: 3
    Dernier message: 22/02/2007, 15h45
  4. Installation Oracle 10g sur VISTA
    Par TéBeSsI dans le forum Oracle
    Réponses: 1
    Dernier message: 07/12/2006, 23h04
  5. Ma première expérience sur Vista Beta 2
    Par Franck.H dans le forum Windows Vista
    Réponses: 5
    Dernier message: 09/06/2006, 17h17

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