18 votes

Pourquoi un fichier binaire n'est-il pas représenté par des 0 et des 1 ?

Dans mon Mac OS, nous connaissons les fichiers sous /bin tous sont des fichiers binaires.. :

crafts-MBP:bin ldl$ pwd
/bin
crafts-MBP:bin ldl$ ls
[       csh     ed          launchctl   mv      rmdir   tcsh
bash    date    expr        link        pax     sh      test
cat     dd      hostname    ln          ps      sleep   unlink
chmod   df      kill        ls          pwd     stty    wait4path
cp      echo    ksh         mkdir       rm      sync    zsh

Lorsque je l'ouvre en utilisant vi éditeur :

crafts-MBP:bin ldl$ vi ps

Ïúíþ^G^@^@^A^C^@^@<80>^B^@^@^@^P^@^@^@°^F^@^@<85>^@ ^@^@^@^@^@^Y^@^@^@H^@^@^@__PAGEZERO^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^Y^@^@^@(^B^@^@__TEXT^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@`^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@`^@^@^@^@^@^@^G^@^@^@^E^@^@^@^F^@^@^@^@^@^@^@__text^@^@^@^@^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@P^V^@^@^A^@^@^@\;^@^@^@^@^@^@P^V^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^D^@<80>^@^@^@^@^@^@^@^@^@^@^@^@__stubs^@^@^@^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@¬Q^@^@^A^@^@^@<92>^A^@^@^@^@^@^@¬Q^@^@^A^@^@^@^@^@^@^@^@^@^@^@^H^D^@<80>^@^@^@^@^F^@^@^@^@^@^@^@__stub_helper^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@@S^@^@^A^@^@^@®^B^@^@^@^@^@^@@S^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^D^@<80>^@^@^@^@^@^@^@^@^@^@^@^@__const^@^@^@^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@ðU^@^@^A^@^@^@P^A^@^@^@^@^@^@ðU^@^@^D^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__cstring^@^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@@W^@^@^A^@^@^@Ó^G^@^@^@^@^@^@@W^@^@^@^@^@^@^@^@^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__unwind_info^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@^T_^@^@^A^@^@^@ä^@^@^@^@^@^@^@^T_^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^Y^@^@^@x^B^@^@__DATA^@^@^@^@^@^@^@^@^@^@^@`^@^@^A^@^@^@^@0^@^@^@^@^@^@^@`^@^@^@^@^@^@^@0^@^@^@^@^@^@^G^@^@^@^C^@^@^@^G^@^@^@^@^@^@^@__nl_symbol_ptr^@__DATA^@^@^@^@^@^@^@^@^@^@^@`^@^@^A^@^@^@^P^@^@^@^@^@^@^@^@`^@^@^C^@^@^@^@^@^@^@^@^@^@^@^F^@^@^@C^@^@^@^@^@^@^@^@^@^@^@__got^@^@^@^@^@^@^@^@^@^@^@__DATA^@^@^@^@^@^@^@^@^@^@^P`^@^@^A^@^@^@0^@^@^@^@^@^@^@^P`^@^@^C^@^@^@^@^@^@^@^@^@^@^@^F^@^@^@E^@^@^@^@^@^@^@^@^@^@^@__la_symbol_ptr^@__DATA^@^@^@^@^@^@^@^@^@^@@`^@^@^A^@^@^@^X^B^@^@^@^@^@^@@`^@^@^C^@^@^@^@^@^@^@^@^@^@^@^G^@^@^@K^@^@^@^@^@^@^@^@^@^@^@__const^@^@^@^@^@^@^@^@^@__DATA^@^@^@^@^@^@^@^@^@^@`b^@^@^A^@^@^@ ^@^@^@^@^@^@^@`b^@^@^D^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__data^@^@^@^@^@^@^@^@^@^@__DATA^@^@^@^@^@^@^@^@^@^@<80>b^@^@^A^@^@^@³!^@^@^@^@^@^@<80>b^@^@^D^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__common^@^@^@^@^@^@^@^@__DATA^@^@^@^@^@^@^@^@^@^@8<84>^@^@^A^@^@^@@^@^@^@^@^@^@^@^@^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__bss^@^@^@^@^@^@^@^@^@^@^@__DATA^@^@^@^@^@^@^@^@^@^@x<84>^@^@^A^@^@^@^Y^@^@^@^@^@^@^@^@^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^Y^@^@^@H^@^@^@__LINKEDIT^@^@^@^@^@^@^@<90>^@^@^A^@^@^@^@@^@^@^@^@^@^@^@<90>^@^@^@^@^@^@P8^@^@^@^@^@^@^G^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@"^@^@<80>0^@^@^@^@<90>^@^@<90>^A^@^@<90><91>^@^@x^@^@^@^@^@^@^@^@^@^@^@^H<92>^@^@p^D^@^@x<96>^@^@ ^@^@^@^B^@^@^@^X^@^@^@^X<97>^@^@L^@^@^@^P<9e>^@^@ ^C^@^@^K^@^@^@P^@^@^@^@^@^@^@^A^@^@^@^A^@^@^@^A^@^@^@^B^@^@^@J^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@Ø<9b>^@^@<8e>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^N^@^@^@ ^@^@^@^L^@^@^@/usr/lib/dyld^@^@^@^@^@^@^@^[^@^@^@^X^@^@^@.þLóÎá2^Dªáµ9¦S<8a>+2^@^@^@ ^@^@^@^A^@^@^@^@^N
^@^@^N

vous voyez, il y a tellement de spectacles @^ et un signal anglais, tel que : __stub_helper .

Pourquoi il n'est pas présenté en termes de 0 y 1 ?

33voto

Nimesh Neema Points 44385

Lorsqu'il s'agit d'ordinateurs, il y a deux interprétations du mot binaire .

  1. En termes de système numérique, il s'agit d'un système numérique en base 2 qui utilise deux symboles, 0 et 1.

  2. Lorsqu'on parle d'un fichier, il s'agit d'un fichier contenant des données non textuelles (exécutables, bibliothèques, fichiers de données, etc.).

Un fichier binaire qui peut être exécuté en tant que processus est appelé un binaire exécutable.

Un fichier étant un fichier binaire ne signifie pas simplement qu'il sera être affichée simplement en termes de 0 et de 1. Il existe plusieurs niveaux d'abstraction dans la manière dont les fichiers sont traités par un ordinateur.

L'affichage d'un fichier binaire en termes de 0 et de 1 rendrait la sortie inutilement longue, et n'est pas l'approche la plus optimale. Un fichier binaire est affiché dans un éditeur de texte selon l'encodage par défaut défini pour cet éditeur.

De même, si un éditeur est configuré pour afficher une sortie binaire, il affichera également tous les fichiers, même ceux en texte brut, en termes de 0 et de 1. Tout se résume finalement à du binaire lorsqu'il est stocké dans un ordinateur.

Pour visualiser un fichier sous la forme la plus élémentaire de 0 et de 1, vous devez utiliser un mode d'édition spécial capable d'afficher les données binaires d'un fichier. L'une de ces méthodes consiste à utiliser la fonction intégrée xxd dans MacOS. Tapez la ligne de commande suivante dans le Terminal :

xxd -b filename

$ xxd -b a.out | head
00000000: 11001111 11111010 11101101 11111110 00000111 00000000  ......
00000006: 00000000 00000001 00000011 00000000 00000000 10000000  ......
0000000c: 00000010 00000000 00000000 00000000 00001111 00000000  ......
00000012: 00000000 00000000 11000000 00000100 00000000 00000000  ......
00000018: 10000101 00000000 00100000 00000000 00000000 00000000  .. ...
0000001e: 00000000 00000000 00011001 00000000 00000000 00000000  ......
00000024: 01001000 00000000 00000000 00000000 01011111 01011111  H...__
0000002a: 01010000 01000001 01000111 01000101 01011010 01000101  PAGEZE
00000030: 01010010 01001111 00000000 00000000 00000000 00000000  RO....
00000036: 00000000 00000000 00000000 00000000 00000000 00000000  ......

Il affichera le dump binaire de nom de fichier sur la sortie standard. Cela fonctionne aussi bien pour les fichiers binaires que pour les fichiers texte.

Une forme plus compacte et couramment utilisée, qui est préférée au binaire, est l'hexadécimal, qui utilise un système numérique en base 16 (0-9, A-F). Pour afficher le contenu du fichier nom de fichier en hexadécimal, il suffit d'exécuter la commande xxd sans aucune option avec juste le nom du fichier comme argument dans le Terminal :

xxd filename

$ xxd  a.out | head
00000000: cffa edfe 0700 0001 0300 0080 0200 0000  ................
00000010: 0f00 0000 c004 0000 8500 2000 0000 0000  .......... .....
00000020: 1900 0000 4800 0000 5f5f 5041 4745 5a45  ....H...__PAGEZE
00000030: 524f 0000 0000 0000 0000 0000 0000 0000  RO..............
00000040: 0000 0000 0100 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 1900 0000 d801 0000  ................
00000070: 5f5f 5445 5854 0000 0000 0000 0000 0000  __TEXT..........
00000080: 0000 0000 0100 0000 0010 0000 0000 0000  ................
00000090: 0000 0000 0000 0000 0010 0000 0000 0000  ................

10voto

Phlarx Points 191

Presque tous les ordinateurs modernes traitent des octets, et non des bits individuels. Un seul octet, comme vous le savez peut-être, peut stocker 256 valeurs différentes, de huit zéros à huit uns.

Lorsque vous ouvrez le fichier binaire dans un éditeur de texte, celui-ci vous montre ces morceaux de la taille d'un octet au lieu de chaque bit individuel. Les symboles qu'il choisit sont déterminés par l'encodage par défaut de votre éditeur. Souvent, un caractère dans votre éditeur correspond à un octet dans le fichier réel, mais il existe des cas particuliers.

Si vous voyez une chaîne de texte lisible, telle que __stub_helper cela signifie qu'un texte particulier est stocké tel quel dans le fichier binaire.

Les cas particuliers que j'ai mentionnés précédemment sont des caractères dits de contrôle qui sont affichés avec un code d'échappement. Les codes d'échappement, comme on le voit ici, commencent par ^ et sont suivis d'un seul caractère supplémentaire. Cette paire, telle que ^@ sont regroupés pour représenter un seul octet. En fait, le symbole ^@ est la valeur zéro, ce qui signifie que les bits à cet emplacement seraient huit zéros.

La raison pour laquelle votre éditeur de texte affiche le fichier binaire de cette manière est qu'il affiche simplement tous les fichiers de cette manière. Si vous utilisiez un éditeur hexadécimal, il afficherait tous les fichiers en hexadécimal. En fait, il n'y a pas de différence fondamentale entre le contenu d'un fichier binaire et celui d'un fichier texte - ce sont les métadonnées et les en-têtes de fichier qui permettent à votre ordinateur de savoir lequel est lequel.

7voto

Oskar Points 1242

Début vi en mode binaire - alors vous pouvez exécuter xxd pour obtenir une vue hexagonale, une vue binaire et éditer le fichier comme vous le feriez. (Bien sûr, la plupart de ces fichiers sont en lecture seule, mais il ne s'agit pas de l'éditeur mais plutôt des permissions/SIP).

vi -b /bin/ps

Ensuite pour convertir le tampon en bits de 1 et 0

:%!xxd -b

Vous pouvez alors voir toutes les qualités binaires de l'exécutable Mach-0, directement dans l'éditeur. Si vous laissez tomber le b, vous obtenez la représentation hexadécimale plus typique qui est un encodage plus efficace en termes d'espace et vous ne voyez pas les valeurs mappées comme des caractères dérivés de l'ASCII où tant de valeurs se terminent par ^@^@^@ lorsque vous partez d'un défaut centré sur le texte brut.

1voto

FeRD Points 119

La réponse la plus simple à votre question est : Pour l'efficacité. Comme d'autres l'ont dit dans leurs réponses, les fichiers sont affichés en utilisant une notation plus compacte que le code binaire brut, car le code binaire brut est insondable inefficace comme moyen de communication des données.

Prenez le ps le programme que vous avez affiché en utilisant vi . Je ne suis pas sûr de la version MacOS de la commande, mais sur mon système Fedora 30 /bin/ps est un exécutable à liaison dynamique (ce qui signifie qu'une partie de son code est chargée à partir d'autres fichiers situés ailleurs sur le disque) qui a néanmoins une taille de fichier d'environ 158k, ou pour être précis une taille de fichier de 157224 octets.

Puisque chaque octet de mémoire contient 8 bits, il faudrait une chaîne de huit 1 ou 0 chiffres à afficher chaque octet individuel de l /bin/ps dossier. Ce qui signifie que, si vous affichez le contenu entier du fichier sous la forme d'une chaîne de caractères de juste 1 ou 0 cette chaîne serait 1257792 (c'est un et un quart million ) chiffres.

Et il s'agit d'un fichier relativement petit ! Pensez au contenu d'un disque Blu-Ray, qui peut facilement atteindre plusieurs dizaines de gigaoctets. Un film de 80 gigaoctets aurait une représentation binaire pure nécessitant 640 milliards d'euros 1 / 0 les chiffres.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X