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

C Discussion :

Copie d'un exe dans une chaine de caractère


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut Copie d'un exe dans une chaine de caractère
    Bonjour,

    Comme indiqué dans le titre j’aimerais copier le contenu du programme lorsqu’il est lancé dans une chaîne de caractère (pour ensuite pouvoir agir dessus, la comparer etc…). J’ai déjà fait ceci mais sa ne marche pas: la console affiche un symbole bizarre (cela est peu-être du au fait que mon programme est composé en binaire et qu’il tente de le convertir en ASCII ?)(le system("pause") est temporaire c’est pour le debug). Voici mon code :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include <stdio.h>
    #include <stdlib.h>
    #include <libgen.h>
    #include <string.h>
    #include <dirent.h>
    #include <stdbool.h>
     
    int main(int argc, char *argv[]) {
     
        DIR *repertory = NULL ;
        repertory = opendir(".") ; //Répertoire courant
     
        struct dirent* actualFile = NULL ;
     
        while ((actualFile = readdir(repertory)) != NULL) { //Parcours le dossier tant qu'il y a des fichiers
     
            char *nameActualFile = malloc (sizeof (char) * strlen (actualFile -> d_name)) ; //Variable pour le nom du fichier actuel
     
            nameActualFile = actualFile -> d_name ; //Nom fichier actuel
     
            if (strstr (nameActualFile, ".exe") || strstr(nameActualFile, ".EXE")) { //Si c'est un .exe
     
                char *name = basename(argv[0]) ; //Récupère le nom du fichier
     
                FILE *fd ;
     
                fd = fopen(name, "rb");
     
                char caractere ;
     
                int longueur ;
     
                while (fread(&caractere, sizeof (char), 1, fd)) longueur++ ;
     
                char *copyActualFile = malloc (sizeof(char) * longueur) ;
     
                while (fread(&caractere, sizeof (char), 1, fd)) sprintf (copyActualFile, "%s%c", copyActualFile, caractere) ;
     
                printf ("%s", copyActualFile) ;
     
                system ("pause") ;
     
                //Fermeture
     
                fclose(fd) ;
     
            }
     
            free (nameActualFile) ;
     
        }
     
        return EXIT_SUCCESS ;
     
    }
    Comment faire ?

    Cordialement et Merci d'avance !

    EDIT : Après modification de quelques truc je suis arrivé à sa :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <stdio.h>
    #include <stdlib.h>
    #include <libgen.h>
    #include <string.h>
    #include <dirent.h>
    #include <stdbool.h>
     
    int main(int argc, char *argv[]) {
     
        DIR *repertory = NULL ;
        repertory = opendir(".") ; //Répertoire courant
     
        struct dirent* actualFile = NULL ;
     
        while ((actualFile = readdir(repertory)) != NULL) { //Parcours le dossier tant qu'il y a des fichiers
     
            char *nameActualFile = malloc (sizeof (char) * strlen (actualFile -> d_name)) ; //Variable pour le nom du fichier actuel
     
            nameActualFile = actualFile -> d_name ; //Nom fichier actuel
     
            if (strstr (nameActualFile, ".exe") || strstr(nameActualFile, ".EXE")) { //Si c'est un .exe
     
                char *name = basename(argv[0]) ; //Récupère le nom du fichier
     
                FILE *fd ;
     
                fd = fopen(name, "rb");
     
                char caractere ;
     
                int longueur ;
     
                while (fread(&caractere, sizeof (char), 1, fd)) longueur++ ;
     
                char *copyActualFile = malloc (sizeof(char) * longueur) ;
     
                rewind(fd) ;
     
                while (fread(&caractere, sizeof (char), 1, fd)) {
     
                    printf("\n%c\n", caractere) ;
     
                    sprintf (copyActualFile, "%s%c", copyActualFile, caractere) ;
     
                }
     
                int i = atoi(copyActualFile) ;
     
                printf ("\n\ni = %d\n", i) ;
     
                system ("pause") ;
     
                //Fermeture
     
                fclose(fd) ;
     
            }
     
            free (nameActualFile) ;
     
        }
     
        return EXIT_SUCCESS ;
     
    }
    Et au débug i = 0 et en caractère j'ai des phrases : des caractère bizarres, des lignes de compilations et des fonctions assembleur (c'est assez joli X) même si ce n'est pas ce que je veux^^)

    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
    39
    40
    41
    42
    43
    44
    MZÉ           ©       @                                   Ç   ║ ┤  ═!©L═!This program cannot be run in DOS mode.
    $       PE  L             Ó     *     Ç      0    @                     á     =3                                  p  ╠                                                          É                     0q  Ó                           .text   ─                       ` P`.data       0                    @ 0└.rdata  T   @                    @ 0@.eh_fram(   P                    @ 0@.bss    d    `                      Ç 0└.idata  ╠   p      $              @ 0└.CRT        Ç      *              @ 0└.tls         É      ,              @ 0└                                                                                                                                                                                                                                                                                                                                        Sâý8íH@@ à└tÃD    ÃD$   Ã$     ðâýÃ$@ Þ3  âýÞ¾  Þ╬  ìD$,ëD$í 0@ ÃD$ `@ Ã$`@ ÃD$,    ëD$ìD$(ëDÞ┘  í`@ à└tBïÿq@ ú0@ ëD$ïCë$Þ¥  í`@ ëD$ïC0ë$Þ¬  í`@ ëD$ïCPë$Þû  ÞÖ  ï0@ ëÞ╝  âõ*Þ  Þç  ï ëDí `@ ëD$í`@ ë$Þ  ë├Þl  ë$Þd  ìt& Sâý(ïD$0ï ï =æ  └w==ì  └rM╗   ÃD$    à   Þ5  â°ä¶   à└àá   1└â─([┬ ìv =ö  └tK=û  └t=ô  └u▀Ù│=  └tB=  └u¤ÃD$    Ã$   Þ▀  â°tià└t▓Ã$    ð©    Ùñ1█Úv   ì┤&    ÃD$    Ã$   Þñ  â°tJà└äs   Ã$    ð©    Úb   à    ð©    ÚO   ÃD$   Ã$   Þ]  â╚ Ú3   ÃD$   Ã$   ÞA  â╚ Ú   ÉÃD$   à   Þ$  à█©    ä§■  ëD$Þª  ïD$ÚÒ■  ì    ì╝'    âýÃ$    |q@ Þk²  ìt& ì╝'    âýÃ$    |q@ ÞK²  ìt& ì╝'    í¿q@  Óë÷ì╝'    í£q@  ÓÉÉÉÉÉÉÉÉÉí0@ à└tAUëÕâýÃ$ @@ Þ}  âýà└║    tÃD$@@ ë$Þi  âë┬àÊt   Ã$0@  Ê╔¾├ìt& UëÕ]├ÉÉÉÉÉÉÉÉÉÉÉâýïD$$à└tâ°t©   â─┬ Éìt& ïT$(ëD$ïD$ ëTë$Þ  ©   â─┬ ì    ì╝'    VSâýâ=(`@ ïD$$t
    Ã(`@    â°tâ°tBâ─©   [^┬ ¥Ç@ ü¯Ç@ ┴■à÷~ß1█ïØÇ@ à└t ðâ├9¾uýâ─©   [^┬ ïD$(ÃD$   ëDïD$ ë$Þ|  Ùáìv ì╝'`@ @ÇÕ u.©   Çó=   Çv©  ÇóàÊx"üÔ   @täÑ   S1└óà└äù   ©   ó÷ãtâ
      âýÚ_   ë\ÃD$   Ã$d@@ ÞÆ■  fÉí `@ à└t├ì    ©TA@ -TA@ â°Ã `@    ~Óâý,â°ë\$ ët$$ë|$(Ä▀   ï5TA@ à÷àà   ïXA@ à█\A@ ╗`A@ à╔ä╣   ╗TA@ ïâ°àG  â├ü¹TA@ ââ   Âïsïâ·ìå  @ ï╣  @ äÄ   â· ä*   âä┤   ëT$Ã$╠@@ ÃD$    Þ╝²  ╗TA@ ü¹TA@ s.ïS╣   ìé  @ ïÆ  @ âëT$ìT$ÞÚ²  ü¹TA@ rÊï\$ ït$$ï|$(â─,├É╗TA@ ïàÊu«ïCà└ä;   ÙíÀ  @ fà÷ÀÍyü╩    )╩╣   üÛ  @ ·ëT$ìT$Þç²  Ú   fÉÂäÊÂ‗yü╬    ë‗üÛ  @ )╩╣   ·ëT$ìT$ÞR²  Ú┌■  ü┴  @ )¤╣   8ìT$ë|$Þ1²  Ú╣■  ëD$Ã$ÿ@@ Þ╝³  ÉÉÉÉÉÉÉÉÉÉÉÉ0@ ï à└tâýfÉ ð0@ ìPï@ë0@ à└uÚâ─¾├ìt& Sâýï░%@ â¹ t$à█t Ø░%@ âÙìv u±Ã$p@ Þ‗¨  â─[├1█Ùë$`@ à╔t¾├ìt& Ã$`@    ÙöÉÉÉÉVSâýÃ$0`@ Þw
      ïH`@ âýà█t-fÉïë$Þf
      âýëãÞd
      à└uà÷ïCë4$ ðïà█uıÃ$0`@ ÞI
      âýâ─[^├âýí,`@ ët$1÷ë\$à└uë*ï\$ït$â─├ÃD$   Ã$   ÞX          à└ë├tGïD$ Ã$0`@ ëïD$$ëCÞÐ    íH`@ ëH`@ ëâýÃ$0`@ Þ╠        ë*âýï\$ït$â─├¥    Ùèìt& Sâýí,`@ ï\$ à└uâ─1└[├Ã$0`@ Þt    ïH`@ âýàÊtï9ÏuÙKì┤&    9┘të┬ïà└u±Ã$0`@ ÞU        âýâ─1└[├ïëë$Þ  Ã$0`@ Þ1     âýÙ┌ïúH`@ ëðÙ█âýïD$$â°tDrâ°t]©   â─├ìt& í,`@ à└uhí,`@ â°uÓÃ$0`@ Ã,`@     Þ  âýÙ┼fÉí,`@ à└t'Ã,`@    ©   â─├ìt& í,`@ à└tÜÞ■  ÙôÃ$0`@ Þ  âýÙ╚ÞÛ²  ÙæÉÉÉÉÉÉÉÉüý<  ë£$,  ï£$@  ë┤$0  ë╝$4  ë¼$8  Þ¬  à█à     ä└  Ç; äï  ë$Þ  âýâ° äç  ¿äo  ìl$ë\$ëÙÃD  ë,$Þe  ïâ├ìé ■■■¸Ê!ð%ÇÇÇÇtÛ®ÇÇ  ä   └â█)Ùìâ3  ë$ÞÀ  à└ëãä4  ì©,  ìCëDël$ë<$Þ¶  Ç¥,   t9ÃD$/   ì¼+  ë<$Þ¶  9ÞtÃD$\   ë<$ÞÓ  9┼t
    fÃä,  \ ë°â└ìæ ■■■¸Ð!╩üÔÇÇÇÇtÚ¸┬ÇÇ  äà    Ê╣A   âÏ)°ìû   fÃä,  * ëÎ1└¾½Ãå$      Ãå(      Ãå      fÃå    fÃå    ë*ï£$,  ï┤$0  ï╝$4  ï¼$8  ü─<  ├┴Þâ├Ú▀■  ìv ┴Ûâ└Úp   Éìt& Þ  1÷à    Ù«ÉÞ¾  1÷à    Ù×Þõ  à    ÙæÞÎ  1÷à    Ú   fÉVSâýï\$ Þ║  à█à     äı   â╗(   î│   ë\$tYïâ$  ë$Þú  à└uoïâ(  â└à└ëâ(  Ää   ìsë4$Þà  fëâ  ìâ   ët$ë$Þt  ìâ  â─[^├ìâ,  ë$Þb  â° ëâ$  t1Ãâ(     Ù½ìv Þ│  â°t*ïâ$  ë$Þ8  Ãâ$      Ãâ(      â─1└[^├Þ▀  à     Ù╔ÞÊ  à    1└Ú   ì    ì╝'    âýë\$ï\$ ët$Þñ  à█à     t-ïâ$  1÷â° t
    ë$Þ¢  ëãë$ÞK  ë*ï\$ït$â─├Þh  ¥    à    ÙÓìv Sâýï\$ ÞK  à█à     t,ïâ$  â° ë$Þf  Ãâ$      Ãâ(      â─[├Þ  à    Ù¯Sâï\$Þ¹  à█à     tïâ(  â[├Þß  à    ©    ÙÚì    ì┐    VSâýï\$ ït$$Þ  à█à     tqâ■ |_t-ë$ÞE   Éìt& Ùë$Þã²  à└t9;│(  ýâ─[^├ìt& ïâ$  â° ë$ÞØ  Ãâ$      Ãâ(      â─[^├ìv ÞC  à    ÙÛÞ6  à    Ù¦ÉÉÉÉÉÉUëÕWVSâý,ï]ÃD$    Ã$   ÞH  à└ëãt
    ë$Þ¯  ëãÃD$°@@ Ã$   Þ$  à█tÇ; usÃD    ÃD$■@@ Ã$    Þ  ìXë\$íP`@ ë$Þ¹  úP`@ ë\ÃD$■@@ ë$Þ┌  ët$Ã$   Þ┬дì?ëEõëTë\$ë$Þy  ïMõâ°ëEÓvfâ|?:uâ┴ïEÓïUõfÃB  Àfà└äÔ   ë¤fâ°\fâ°/ë╩u(Àë╩fâ°\uâ┬Àfâ°\t¶fâ°/t¯fà└äú   ëÎÀBìJfà└u¥fâ? ࣠  ÃD    ÃD$·@@ Ã$    ÞÐ  ìxë|$íP`@ ë$Þ┼  úP`@ ë├ë|ÃD$·@@ ë$Þó  ët$Ã$   Þè  ë4$Þ  ïe▄ìe¶ëÏ[^_]├âÛÀfâ°/t
    fâ°\àd   fà  9·wßÚV   ïe▄Ú.■  ïEÓëDïUõë$ëT$Þ;  â° tã fà  ÃD    ïUõÃ$    ëT$Þ  â° äg   ├Ú`   ÉÉ %pq@ ÉÉ %áq@ ÉÉ %xq@ ÉÉ %tq@ ÉÉ %Çq@ ÉÉ %Þq@ ÉÉ %³q@ ÉÉ %©q@ ÉÉ %╝q@ ÉÉ %╚q@ ÉÉ %Óq@ ÉÉ %Ïq@ ÉÉ %ýq@ ÉÉ %¼q@ ÉÉ %Èq@ ÉÉ % r@ ÉÉ %┤q@ ÉÉ %└q@ ÉÉ %─q@ ÉÉ %r@ ÉÉ %ñq@ ÉÉ %ðq@ ÉÉ %░q@ ÉÉ %äq@ ÉÉ %öq@ ÉÉ %°q@ ÉÉ %Éq@ ÉÉ %¶q@ ÉÉ %*q@ ÉÉ %îq@ ÉÉ %êq@ ÉÉ %õq@ ÉÉ r@ ÉÉ %▄q@ ÉÉ %╠q@ ÉÉ %Tq@ ÉÉ %8q@ ÉÉ %Dq@ ÉÉ %Hq@ ÉÉ %`q@ ÉÉ %\q@ ÉÉ %4q@ ÉÉ %Xq@ ÉÉ %@q@ ÉÉ %Pq@ ÉÉ %0q@ ÉÉ %Lq@ ÉÉ %<q@ ÉÉQP=   ìL$rüÚ   â   -   =   wÙ)┴â         XY├ÉÉ %hq@ ÉÉfÉfÉfÉfÉfÉfÉUëÕWVSâõ*âý0Þ¤¶  Ã$$@@ ì|$/Þ ÷  ëD$ïD$ë$Þ °  à└ä  ì┤&    âÃD$&@@ ë$ëD$Þ■  à└ä  ïEï ë$Þd¹  ÃD$0@@ ë$Þ³²  ït$ë├Ùâãë\$ÃD   ÃD$   ë<$Þ¦²  à└u¦ë4$ët$Þı²  ë$ëãÞ˲  Ù+É¥D$/ë$Þ╦²  ¥D$/ëtÃD$3@@ ë4$ëD$Þ²  ë\$ÃD   ÃD$   ë<$Þz²  à└uÂë4$Þû²  Ã$8@@ ëD$ÞIJ  Ã$B@@ Þè²  ë$Þè²  ïD$ë$Þå²  ïD$ë$ÞÔ¸  à└àÛ■  ìe¶[^_]├fÉïD$ÃD$+@@ ë$Þ³³  à└àÒ■  Ù©ÉÉUëÕâýÞEÝ  Ã$0@ ÞÝ  ╔├ÉÉÉÉÉÉÉ    É%@                                                                              @  └%@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     libgcj-13.dll _Jv_RegisterClasses   . .exe .EXE rb %s%c
     
    i = %d
     pause É@ Mingw runtime failure:
       VirtualQuery failed for %d bytes at address %p      Unknown pseudo relocation protocol version %d.
         Unknown pseudo relocation bit size %d.
         /   .     GCC: (tdm-1) 4.9.2  GCC: (tdm-1) 4.9.2  GCC: (tdm-1) 4.9.2  GCC: (tdm-1) 4.9.2                                                                                                                                                                                     zR ê  (      Ó┐     AâC@b4C@L<C@È<       H   ─└  c   AâC0E
    A├F   l   ┬      C    Ç   ┬      C    ö   (┬            ¿   $┬                zR ê        h┬  C    C U
    H`   8   <   ÿ┬  å    AåAâC d
    F├AãCk
    F├AãC     x   ý┬                zR ê        ð┬  ▄    ]âñ├Bâ       zR ê        x├                zR ê        \├  R    AâC0   <   8   á├     C`DâYåFçFàETC`t
    ┼Ãã├HiPC`RPC`   $   x   p─  È   l0OâåçÒ
    Ãã├B          zR ê        ã  ,    N\     4   (ã  I    AâC m
    A├A    X   Tã                zR ê  8      Hã  `    AåAâC LI PC jC CA├Aã 4   X   lã  î    C IåFâQ
    ã├AsQ LE K
    ├ãA  <   É   ─ã  É    AâC P
    C├ALI nC C
    C├AZC  (   ð   Ã  ÿ    C X
    EiC _
    E\C        zR ê  0      pà     F└Gâ\åçàd╝C└a
    ┼Ãã├A 8   P   L╔     AåAâC Ç
    A├AãAW
    C├AãA    î    ╩  ]    C DâHå{
    ã├A      ░   \╩  P    AâC }
    A├A     È   ê╩  4    AâC\
    A├A 8   °   ñ╩  Ü    AåAâC D
    A├AãEj
    Fçåâ▒        zR ê  <      *╩  n   AàB
    ├AãAÃA┼C/
    ├AãAÃA┼A                                                                                                                                                                                                                         Pp          u  0q  êp          u  hq  Ép          └u  pq                      r  (r  @r  Nr  dr  tr  êr  Ür  Âr  ╬r  ýr  ·r  s      s      &s  6s  Fs  Ts  fs  ps  zs  ês  ûs  ós  «s  Âs  └s  ╠s  Ès  Ìs  µs  *s  ·s  t
    t  t  t  &t  2t  <t  Ft  Pt  Zt  dt  pt  zt  ät  Ät  ÿt  ót  ¼t  Ât  ┬t      r  (r  @r  Nr  dr  tr  êr  Ür  Âr  ╬r  ýr  ·r  s      s      &s  6s  Fs  Ts  fs  ps  zs  ês  ûs  ós  «s  Âs  └s  ╠s  Ès  Ìs  µs  *s  ·s  t
    t  t  t  &t  2t  <t  Ft  Pt  Zt  dt  pt  zt  ät  Ät  ÿt  ót  ¼t  Ât  ┬t      ¤ DeleteCriticalSection ý EnterCriticalSection  ExitProcess ßGetFileAttributesA  ■GetLastError  GetModuleHandleA  AGetProcAddress  ÌInitializeCriticalSection .LeaveCriticalSection  tSetUnhandledExceptionFilter òTlsGetValue ¢VirtualProtect  ┐VirtualQuery  P _strdup 7 __getmainargs M __p__environ  O __p__fmode  c __set_app_type  ô _cexit  Â _errno  ═ _findclose  ╬ _findfirst  Ð _findnext õ _fullpath
    _iob  _onexit ¬_setmode  Gabort Natexit  Patoi  Scalloc  _fclose  jfopen pfread qfree  yfwrite  ñmalloc  ªmbstowcs  ¬memcpy  ▒printf  │putchar ║realloc ¢rewind  └setlocale ┬signal  ┼sprintf ═strcpy  Ðstrlen  Ístrrchr Ïstrstr  Ósystem  ývfprintf  wcstombs     p   p   p   p   p   p   p   p   p   p   p   p   p  KERNEL32.dll    p  msvcrt.dll  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  (p  msvcrt.dll                                                          É@ @@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         É@ É@ `@ Ç@

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Un exécutable est constitué d'une succession d'octets.
    Une chaîne de caractères est une succession de caractères.
    On ne peut pas dire "un caractère égale un octet". Par exemple l'octet 0x00 deviendrait le caractère '\0' qui est le terminateur de chaîne, mais une chaîne ne peux avoir qu'un unique terminateur!

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Effectivement merci pour ton aide ! Du coup quel type serait apte à recevoir la copie d’un EXE en ne transformant pas 0 en \0 ? car au final il n’y as à que sa dans un exe (+ les 0 et 1 et de l’hexadecimal)

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Que cherches-tu à faire ?
    Tu parles "d'agir sur l'exe" : souhaites-tu modifier en direct le comportement de l'exe en cours d'exécution ? T'imagines-tu voir des "choses qui bougent" dans le fichier ".exe" lorsque le programme est en cours de fonctionnement ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Agir était un exemple en fait le but final serait de copier également le contenu d'un autre .exe pour comparer les 2 contenus et voir si ils sont identiques.
    Non je veux voir le contenu de l’exécutable : il est composé de binaire et j'aimerais récupérer cela.

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Voici la dernière "mise à jour" du code cela ne marche toujours pas... La console affiche MZE (avec un accent sur le E) :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <libgen.h>
    #include <string.h>
    #include <dirent.h>
    #include <stdbool.h>
     
    int main(int argc, char *argv[]) {
     
        char *name = basename(argv[0]) ; //Récupère le nom du fichier
     
        FILE *fd ;
     
        fd = fopen(name, "rb");
     
        int longueur = 0 ;
     
        char caractere ;
     
        while (fread(&caractere, 1, 1, fd) == 1) longueur++ ;
     
        if (ferror(fd)) {
     
            perror("fread") ;
            exit(EXIT_FAILURE);
     
        }
     
        char *copyActualFile = malloc (sizeof(char) * longueur) ;
     
        rewind(fd) ;
     
        caractere = 0 ;
     
        int i = 0 ;
     
        for (i = 0 ; fread(&caractere, 1, 1, fd) == 1 ; i++) {
     
            copyActualFile[i] = caractere ;
     
        }
     
        printf("%s", copyActualFile) ;
     
        system ("pause") ;
     
        //Fermeture
     
        free(copyActualFile) ;
     
        fclose(fd) ;
     
        return EXIT_SUCCESS ;
     
    }

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu ne peux pas afficher les infos sans traitement préalable.
    C'est comme si je te lisais un texte en chinois pour t'expliquer une procédure. Tu ne comprendras rien. Il faut traduire les informations.
    Dans ton cas, c'est exactement la même chose.
    Si tu veux vraiment afficher quelque chose qui représente ton .exe, alors affiche les données en Mime64 par exemple, ou encore affiche en hexa chacun des caractères.
    Mais n'affiche pas les données brutes sous forme de chaîne de caractère puisquece n'est pas une chaîne de caractères : tu dois d'abord faire une traduction vers un format "lisible/affichable".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Du coup à la place de %s dans le printf je met %x ? Sa m'affiche 733c90A cela vous paraît-il correct ?

  9. #9
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Tadam ! Cela est correct maintenant non ? :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    ```c
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <libgen.h>
    #include <string.h>
    #include <dirent.h>
    #include <stdbool.h>
     
    int main(int argc, char *argv[]) {
     
        char *name = basename(argv[0]) ; //Récupère le nom du fichier
     
        FILE *fd ;
     
        fd = fopen(name, "rb");
     
        int longueur = 0 ;
     
        char caractere ;
     
        while (fread(&caractere, 1, 1, fd) == 1) longueur++ ;
     
        if (ferror(fd)) {
     
            perror("fread") ;
            exit(EXIT_FAILURE);
     
        }
     
        char *copyActualFile = malloc (sizeof(char) * (longueur + 1)) ;
     
        rewind(fd) ;
     
        caractere = 0 ;
     
        int i = 0 ;
     
        for (i = 0 ; fread(&caractere, 1, 1, fd) == 1 ; i++) {
     
            copyActualFile[i] = caractere ;
     
        }
     
        copyActualFile[i+1] = '\0' ;
     
        printf("%x", copyActualFile) ;
     
        system ("pause") ;
     
        //Fermeture
     
        free(copyActualFile) ;
     
        fclose(fd) ;
     
        return EXIT_SUCCESS ;
     
    }
     
    ```
    Et j'obtiens : b53c90

  10. #10
    Inactif  
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Décembre 2017
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Décembre 2017
    Messages : 155
    Par défaut
    Déjà sizeof (char) vaut 1, donc... donc le *sizeof(char) est juste une distraction.

    Pourquoi basename?

    Pourquoi argv[0]?

    C'est un exercice scolaire?

    Citation Envoyé par Jupiter41 Voir le message
    Agir était un exemple en fait le but final serait de copier également le contenu d'un autre .exe pour comparer les 2 contenus et voir si ils sont identiques.
    Non je veux voir le contenu de l’exécutable : il est composé de binaire et j'aimerais récupérer cela.
    Tu veux le "voir" sous quelle forme? Binaire? (suite de 0 et 1) Hexadécimal? Chaque octet en décimal?

    Afficher les caractères ASCII comme tels?

  11. #11
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 786
    Par défaut
    Hello,

    Quand comprendras-tu (cfr les post sur oc) qu'un .exe contient des zéros binaires (0x00 ou '\0' ), et que donc l'afficher avec un printf() ne sert à rien ?

    Prends un editeur hexa (ou même notepad++) et regarde ce qui se trouve dans un .exe ....

  12. #12
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Basename parce que je récupère le nom du fichier lorsqu'il est exécuté. Je veux l'afficher n'importe comment dans mon dernier programme je l'affiche en hexadécimal.

    Edjar : le jour où vous comprendrez que je sais qu'ils sont composé de binaire et que c'est pour cela que je l'affiche avec %x et que vous arrêterez de poster un message pour rien.

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    "%x" ça permet d'afficher un nombre entier, et un tableau de char n'est pas un nombre entier.
    Il faut afficher chaque octet lu avec un "%x"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int c;
    while ( EOF != ( c = fgetc( file ) ) ) {
       printf( "%02X " , (unsigned char)c );
    }

  14. #14
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Je ne veux pas l'afficher je veux l'enregistre dans une variable. Le printf est pour verifier

  15. #15
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Je fais un résumé de ce que je veux faire :

    - copier le contenu d'un premier fichier dans une variable

    -copier le contenu d'un deuxième fichier dans une 2ème variable

    -et faire un if (strstr (var1, var2)) printf ("Les fichiers comportent une partie identique") ; (ou l'inverse) sachant que dans le 2ème fichier il peut avoir d'autre chose en plus que le code du premier fichier.

  16. #16
    Inactif  
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Décembre 2017
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Décembre 2017
    Messages : 155
    Par défaut
    Citation Envoyé par Jupiter41 Voir le message
    -et faire un if (strstr (var1, var2)) printf ("Les fichiers comportent une partie identique") ; (ou l'inverse) sachant que dans le 2ème fichier il peut avoir d'autre chose en plus que le code du premier fichier.
    Un fichier binaire est composé d'octets et pas de caractère.
    Un fichier binaire est composé d'octets et pas de caractère.
    Un fichier binaire est composé d'octets et pas de caractère.
    Un fichier binaire est composé d'octets et pas de caractère.

  17. #17
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    @Jupiter41

    Un fichier binaire est composé d'octets et pas de caractère.
    Un fichier binaire est composé d'octets et pas de caractère.
    Un fichier binaire est composé d'octets et pas de caractère.

    Tu as dû oublier que strstr() est une fonction qui s'applique à des chaînes de caractères, peut-être qu'en utilisant plutôt memcmp() ?

  18. #18
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Du coup je garde mon code et je test avec memcmp ? Je test demain.
    Mais memcmp demande un argument size_t que mettre dedans ? Car je peux avoir l'un de mes fichiers qui est plus grand que l'autre...

  19. #19
    Inactif  
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Décembre 2017
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Décembre 2017
    Messages : 155
    Par défaut
    En effet, dès que tu manipules des suites d'octets arbitraires, tu vas utiliser les fonctions en "mem".

  20. #20
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 24
    Par défaut
    Ok d'accord Je test demain et je vous dis si sa marche

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 7
    Dernier message: 17/09/2005, 23h38
  3. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50
  4. [VB.NET] Recherche dans une chaine de caractères
    Par Pleymo dans le forum Windows Forms
    Réponses: 12
    Dernier message: 09/04/2005, 10h25
  5. [C#] Une variable dans une chaine de caractères...
    Par GlorfindelHebril dans le forum Windows Forms
    Réponses: 9
    Dernier message: 31/03/2005, 14h30

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