GNU/Linux >> Tutoriels Linux >  >> Linux

Comment comparer des fichiers binaires sous Linux ?

Cela imprimera le décalage et les octets en hexadécimal :

cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'

Ou faites $1-1 pour que le premier décalage imprimé commence à 0.

cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'

Malheureusement, strtonum() est spécifique à GAWK, donc pour les autres versions de awk, par exemple, mawk, vous devrez utiliser une fonction de conversion octal-décimal. Par exemple,

cmp -l file1.bin file2.bin | mawk 'function oct2dec(oct,     dec) {for (i = 1; i <= length(oct); i++) {dec *= 8; dec += substr(oct, i, 1)}; return dec} {printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)}'

Décomposé pour plus de lisibilité :

cmp -l file1.bin file2.bin |
    mawk 'function oct2dec(oct,    dec) {
              for (i = 1; i <= length(oct); i++) {
                  dec *= 8;
                  dec += substr(oct, i, 1)
              };
              return dec
          }
          {
              printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)
          }'

Comme ~charlatan souligné :

 % xxd b1 > b1.hex
 % xxd b2 > b2.hex

Et puis

 % diff b1.hex b2.hex

ou

 % vimdiff b1.hex b2.hex

diff + xxd

Essayez diff dans la combinaison suivante de substitution de processus zsh/bash :

diff -y <(xxd foo1.bin) <(xxd foo2.bin)

Où :

  • -y affiche les différences côte à côte (facultatif).
  • xxd est un outil CLI pour créer une sortie hexdump du fichier binaire.
  • Ajouter -W200 à diff pour une sortie plus large (de 200 caractères par ligne).
  • Pour les couleurs, utilisez colordiff comme indiqué ci-dessous.

colordiff + xxd

Si vous avez colordiff , il peut coloriser diff sortie, par exemple :

colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)

Exemple de sortie :

vimdiff + xxd

Vous pouvez également utiliser vimdiff , par exemple

vimdiff <(xxd foo1.bin) <(xxd foo2.bin)

Conseils :

  • si les fichiers sont trop volumineux, ajoutez une limite (par exemple, -l1000 ) pour chaque xxd

Linux
  1. 10 façons d'analyser des fichiers binaires sous Linux

  2. Comment chiffrer des fichiers avec gocryptfs sous Linux

  3. Comment renommer des fichiers sous Linux

  4. Comment comparer trois fichiers sous Linux à l'aide de l'outil diff3

  5. Comment compresser plusieurs fichiers sous Linux

Comment exécuter un package .run ou .bin sous Linux

Comment renommer un ou plusieurs fichiers sous Linux

Exécuter des fichiers binaires sous Linux

Comment comparer des fichiers sous Linux à l'aide de l'outil Meld (Diff/Merge)

Comment comparer deux fichiers dans un terminal Linux

Comment compresser un fichier sous Linux