52 votes

Comment visualiser le contenu binaire d'un fichier en mode natif sous Windows 7 (est-ce possible) ?

J'ai un fichier d'un peu plus de 500 Mo qui pose des problèmes.

Je pense que le problème réside dans la convention de fin de ligne (EOL) utilisée. J'aimerais examiner le fichier dans sa forme brute non interprétée (1) pour confirmer la convention de fin de ligne du fichier.

Comment puis-je voir le "binaire" d'un fichier en utilisant quelque chose d'intégré à Windows 7 ? Je préférerais ne pas avoir à télécharger quoi que ce soit d'autre.

(1) Mon collègue et moi-même avons ouvert le fichier dans des éditeurs de texte, qui affichent les lignes comme on pourrait s'y attendre. Mais les deux éditeurs de texte ouvrent des fichiers avec des conventions EOL différentes et les interprètent automatiquement. (TextEdit et Emacs 24.2. Pour Emacs, j'ai créé un deuxième fichier avec seulement les 4 premiers octets en utilisant head -c4096 sur une machine linux et l'a ouvert depuis ma machine Windows.

J'ai essayé d'utiliser le mode hexl dans Emacs, mais lorsque je suis passé au mode hexl et revenu au mode texte, le contenu du tampon avait changé, ajoutant un ^M visible à la fin de chaque ligne, donc je ne m'y fie pas pour l'instant.

Je pense que le problème réside dans le(s) caractère(s) de fin de ligne utilisé(s). Les éditeurs que mon collègue et moi avons essayés (1) reconnaissaient automatiquement la convention de fin de ligne et nous montraient des lignes. Et d'après d'autres éléments, je pense que la convention de fin de ligne est le retour chariot uniquement. (2) retour uniquement.

Pour savoir ce que contient réellement le fichier, j'aimerais examiner le contenu binaire du fichier, ou au moins quelques milliers d'octets du fichier, de préférence en hexadécimal, bien que je puisse travailler avec du décimal ou de l'octal. Uniquement des uns et des zéros seraient assez grossiers à regarder.

MISE À JOUR

Sauf celle qui suggère DEBUG Toutes les réponses ci-dessous fonctionnent dans une certaine mesure. J'ai ajouté une note à chacune d'entre elles pour indiquer qu'elles étaient utiles. Ma question était mal formulée. En testant chaque solution suggérée, je me suis rendu compte que je voulais vraiment que les contenus hexadécimaux et textuels soient affichés côte à côte, et que lorsque j'avais le curseur sur quelque chose, que ce soit une valeur d'octet ou un caractère textuel, la chose correspondante de l'autre côté était mise en surbrillance.

J'ai en fait résolu mon problème lorsque le mode hexl d'Emacs a commencé à fonctionner "correctement". J'ai donc fini par n'utiliser aucune de ces réponses, me contentant de les tester (je devrais vraiment enquêter sur le comportement bizarre d'Emacs et déposer un rapport de bogue).

0voto

simmbot Points 417

Je sais que vous utilisez Emacs mais Vim les utilisateurs peuvent utiliser xxd de l'utilitaire :

xxd -s <start_offset> -l <length_offest> <file>

c'est-à-dire

Usage:
       xxd.exe [options] [infile [outfile]]
    or
       xxd.exe -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]
Options:
    -a          toggle autoskip: A single '*' replaces nul-lines. Default off.
    -b          binary digit dump (incompatible with -ps,-i,-r). Default hex.
    -c cols     format <cols> octets per line. Default 16 (-i: 12, -ps: 30).
    -E          show characters in EBCDIC. Default ASCII.
    -g          number of octets per group in normal output. Default 2.
    -h          print this summary.
    -i          output in C include file style.
    -l len      stop after <len> octets.
    -ps         output in postscript plain hexdump style.
    -r          reverse operation: convert (or patch) hexdump into binary.
    -r -s off   revert with <off> added to file positions found in hexdump.
    -s [+][-]seek  start at <seek> bytes abs. (or +: rel.) infile offset.
    -u          use upper case hex letters.
    -v          show version: "xxd V1.10 27oct98 by Juergen Weigert (Win32)".

0voto

Zimba Points 753

Pour l'affichage en décimal :
comp File1 File2 /D /m
(similaire à gc -encoding byte File1 dans powershell)

Pour visualiser l'hexagone :
fc /b File1 File2
(similaire à gc -encoding byte File1 |% {write-host ("{0:X2}" -f $_)} dans powershell)

NB :
Le fichier 2 est un fichier de référence qui ne présente pas de caractères similaires à ceux du fichier 1.
En cas d'incertitude, une solution de contournement consisterait à remplir File2 avec 0x20, puis, pour la deuxième comparaison, à remplir File2 avec 0x00 et à remplacer les caractères manquants par 0x20 (lors de la première comparaison).
(Ou remplissez simplement les décalages manquants avec 0x20 au lieu de la deuxième comparaison)

Mise à jour : 15 Oct 2021

powershell 5.1 format-hex semble présenter un bogue dans le décodage des fichiers binaires. Un exemple de test affichait les offsets 0x290 & 0x7c0 pour un fichier de 2kB.

Exemple de sortie :

00000280   5B E3 6D 67 2E D9 03 AB 0A DF D7 73 7A 3F 61 9B  [ãmg.Ù.«.ß×sz?a
E 4C FB 38 46 91 C7 13 42 92 C7 8A B4 DF E8 6A  ÞLû8FÇ.BGßèj
000002A0   00 0C 3D 68 50 9D D4 9C 1C 92 DB F0 B5 79 5F 4A  ..=hPÔ.Ûðµy_J
.
.
.
000007B0   5C F1 20 1F D8 8E EA 9B 03 91 EF 20 87 A4 4D 9B  \ñ .Øêï ¤M
0   A5 54 30 1D CC 4F 56 31 C5 39 15 2E 3A A8 8D BC  ¥T0.ÌOV1Å9..:¨¼
000007D0   B1 BA 8D 30 58 F5 DE 4F DD 8C 4B 34 22 D5 27 6A  ±º0XõÞOÝK4"Õ'j

certutil fonctionne bien.

Testé sur Win 10 x64

0voto

rbento Points 191

Dans Windows PowerShell :

PS C:\Users\YourName\Desktop>Format-Hex file.dll

Ou sa forme abrégée :

PS C:\Users\YourName\Desktop>fhx file.dll

Par ailleurs, si vous préférez que le hexdump disponible, créez un script batch script qui fonctionne à la fois avec PowerShell et Command Prompt :

  • Créer un fichier appelé hexdump.bat avec le contenu suivant :

    @echo off powershell Format-Hex %*

  • Copiez-le sur C:\Windows\System32 (nécessite des droits d'administrateur)

  • Utilisez-le via PowerShell ou l'invite de commande

    C:\Users\YourName\Desktop>hexdump file.dll

           Path: C:\Users\YourName\Desktop\file.dll
    
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ............. 00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ¸.......@..... ...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X