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

Scripts/Batch Discussion :

[DOS] paramètre de programme en hex


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut [DOS] paramètre de programme en hex
    Bonjour,

    Dans une invite de commande MS DOS, je voudrai lancer un programme avec en paramètre, des valeurs en hexadécimal.

    Je m’explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\temp\Debug\ monprgm.exe  aaaa
    Si avec un debugger, ntsd par exemple, je regarde ce qui à été chargé en mémoire, j’aurai :
    61 61 61 61
    61 étant la valeur hexadécimal du caractère ‘a’ en ASCII.

    Par exemple, je voudrai charger en mémoire 11 en hexadécimale, l’équivalant d’un char opcode[]="\x11" en C++.

    Le problème est que ce qui a pour code hexadécimal 11 en ASCII est DC1 ( Device Control 1, XON)…
    http://www.chez.com/cosmos2000/Nombres/ASCII.html (11 en hex = 17 en décimal)

    Existe-t-il une option pour passer un paramètre en hexadécimal à un programme dans une invite de commande MS DOS ?

  2. #2
    Membre Expert
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Par défaut
    Je viens de faire un petit test (sous console XP, pas en MS-DOS pur, mais je pense que le résultat serait le même) : tout caractère ayant une valeur ASCII strictement inférieure à 32 semble être tout simplement interprété comme un séparateur de paramètres de la ligne de commande entrée. En revanche, un tel caractère dans le nom de la commande à exécuter est pris en compte.

    Concrètement, j'ai fait un petit programme appelé test qui affiche les paramètres qui lui sont passés en argument. Voici les différents résultats :
    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
    20
    > test a b c
    Paramètre 1 : "a"
    Paramètre 2 : "b"
    Paramètre 3 : "c"
    
    > test ab c^[d ef
    Paramètre 1 : "ab"
    Paramètre 2 : "c"
    Paramètre 3 : "d"
    Paramètre 4 : "ef"
    
    > test ab ^[ cd
    Paramètre 1 : "ab"
    Paramètre 2 : "cd"
    
    > tes^[t a
    'tesXt' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
    
    > test^[ a
    'testX' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
    Notes :
    * ^[ correspond au caractère ASCII 27 (échappement)
    * le X est la représentation du caractère ASCII 27 (une flèche orientée vers la gauche)
    * j'ai fait le test avec d'autres caractères ASCII < à 32

    Tout ça pour dire que j'ai bien peur que ton problème soit difficile à solutionner. Si le contexte te le permet tu peux éventuellement résoudre ton problème (et encore je ne sais pas si ça fonctionnerai) en créant un petit programme qui prendrait en argument le nom d'un programme à lancer, puis les arguments à lui passer sous forme hexa.

    Bon courage et tiens nous au courant

  3. #3
    Membre averti
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Par défaut
    Oui je ne sais pas si c’est possible via une invite de commande…
    En tout cas merci pour la réponse.
    Je n’avais pas essayé ^[ mais je viens aussi de faire quelque test mais…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C&#58;\temp\Debug\ntsd monprgm.exe ^&#91;DC1^&#91;11 ^&#91;0x11 ^&#91;\x11
    Dump de la mémoire où est mon argument (à l’adresse 00430eaa):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00430eaa  5b 44 43 31 5b 31 31 00-5b 30 78 31 31 00 5b 5c  &#91;DC1&#91;11.&#91;0x11.
    ‘^[‘ est remplacé par la valeur hexadecimal en ASCII de ‘[‘ :5b

    Je viens aussi d’essayer (comme le proposai un membre du forum) de taper ALT+1+7 () dans un notepad et de le copier mais ça ne marche pas .

    C:\temp\Debug\ntsd monprgm.exe aaaa

    dump de la mémoire où est mon argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    0 &#58;000> d 430eaa 
    00430eb5  3f 61 61 61 61 61 61 00-fd fd fd fd 00 00 00 00  ?aaaaaa.........
    L’invite de commande MS DOS n’a passé au programme que ‘ ?’ soit 3f en hex, ce qui n’arrange pas mes affaires.

    En fait j’avais déjà fait comme tu le propose, en utilisant CreateProcessA pour lancer mon programme en passant un argument en hex, ce qui marche très bien, mais je voulais savoir si il y avait un moyen, une option, pour le faire directement via l’invite de commande MS DOS : passer un argument à mon programme en hex ?

Discussions similaires

  1. [PC] Commande Dos dans un programme Cobol
    Par Magoo dans le forum Cobol
    Réponses: 2
    Dernier message: 24/01/2008, 08h37
  2. Réponses: 13
    Dernier message: 15/05/2007, 16h03
  3. passage de paramètres à un programme
    Par habasque dans le forum NetBeans
    Réponses: 2
    Dernier message: 07/05/2007, 17h50
  4. Ajout de paramètres à un programme
    Par cretindezalpes dans le forum Delphi
    Réponses: 6
    Dernier message: 19/01/2007, 15h30
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

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