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

  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
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    En maintenant ALT enfoncé tu peux saisir le code ASCII d'une touche au pad numérique, en décimal. Je sais pas si ça marche en hexa, mais bon ALT+1+7 (17=0x11) ça donne bien un caractère de n'importe quoi dans le notepad.
    Dans la cmd c'est autre chose, c'est interprété comme CTRL+Q. Mais en copiant la caractère sous notepad et en le collant (clic droit->coller) dans la commande ça marche.
    Enfin bon, perso je pense que ce serait plutot à ton soft de gérer ça en acceptant des nombres hexa sous forme texte et en faisant la conversion.

  3. #3
    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

  4. #4
    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 en fait j’avais déjà essayé 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 :

    0 :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.

    Merci pour la réponse en tout cas.

    En fait j’ai utilisé 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 via l’invite de commande MS DOS : passer un argument à mon programme en hex ?

  5. #5
    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 ?

  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
    Par défaut
    bonjour, comme le disais Aurélien, tu dois entrer tes arguments sous forme de texte et convetir (en interne, dans ton programme) en hexadécimal.

    En C++ ca donne quelque chose comme ca :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    int main &#40;int argc, char* argv&#91;&#93;&#41;
    &#123;
    	string strtemp;
    	istringstream iss;
    	unsigned int* argtable = new unsigned int&#91;argc&#93;;
    
    	for &#40;int i = 1; i < argc; i++&#41;
    	&#123;
    		strtemp.assign&#40;argv&#91;i&#93;&#41;;
    		istringstream iss &#40;strtemp&#41;;
    		iss >> hex >> argtable&#91;i-1&#93;;
    	&#125;
    
    	for &#40;i = 1; i < argc; i++&#41;
    	&#123;
    		cout << "argument " << i << " &#58; " << argtable&#91;i-1&#93; << endl;
    	&#125;
    	
    	int somme = 0;
    
    	for &#40;i = 0; i < argc-1; i++&#41;
    	&#123;
    		somme +=argtable&#91;i&#93;;
    	&#125;
    
    	cout << "somme des arguments&#58; " << somme << endl;
    
    	delete&#91;&#93; argtable;
    
    	return 0;
    &#125;

    input & output :

    Microsoft Windows XP [version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    F:\Program Files\Microsoft Visual Studio\MyProjects\divers_test\Debug>test.exe FF 1 A
    argument 1 : 255
    argument 2 : 1
    argument 3 : 10
    somme des arguments: 266
    Attention il n'y pas de vérification de mauvais caractères entrés... Le code n'est sans doute pas parfait, mais ca fonctionne.

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