18 votos

¿Por qué un archivo binario no se muestra como 0s y 1s?

En mi Mac OS, sabemos que los archivos bajo /bin todos son archivos binarios.:

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

Cuando lo abro con vi editor:

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

ves que hay tantos espectáculos @^ y alguna señal inglesa, como: __stub_helper .

Por qué no se muestra en términos de 0 y 1 ?

32voto

Nimesh Neema Puntos 69

Cuando se trata de ordenadores, hay dos interpretaciones de la palabra binario .

  1. En términos de sistema numérico, se refiere a un sistema numérico de base 2 que utiliza dos símbolos, 0 y 1.

  2. Cuando se habla de fichero, se hace referencia a un archivo que contiene datos no textuales (ejecutables, bibliotecas, archivos de datos, etc.).

Un archivo binario que puede ejecutarse como un proceso se denomina binario ejecutable.

Que un archivo sea binario no significa simplemente que se visualizarse simplemente en términos de 0 y 1. Hay varias capas de abstracción en la forma en que un ordenador maneja los archivos.

Mostrar un archivo binario en términos de 0 y 1 alargaría innecesariamente la salida, y no es el enfoque más óptimo. Un archivo binario se muestra en un editor de texto según la codificación predeterminada establecida para ese editor.

Además, si un editor está configurado para mostrar salida binaria, también mostrará todos los archivos, incluso los de texto plano, en términos de 0 y 1. En última instancia, todo se reduce a binario cuando se almacena en un ordenador.

Para ver un archivo en la forma más básica de 0 y 1, tendrá que utilizar un modo de editor especial que sea capaz de mostrar los datos binarios de un archivo. Uno de estos modos es utilizar el editor incorporado xxd en MacOS. Escriba la siguiente línea de comandos en 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  ......

Mostrará el volcado binario de nombre de archivo en la salida estándar. Esto funciona tanto para archivos binarios como de texto.

Una forma más compacta y comúnmente utilizada, que se prefiere al binario, es el hexadecimal, que utiliza un sistema numérico de base 16 (0-9, A-F). Para mostrar el contenido del fichero nombre de archivo en hexadecimal, basta con ejecutar el comando xxd sin ninguna opción con sólo el nombre del archivo como argumento en 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  ................

1 votos

Yo uso 0xED.app. suavetech.com/0xed

36 votos

En aras de una claridad absoluta, quizá merezca la pena decirlo explícitamente: cada de su ordenador se compone de 0 y 1.

0 votos

El ls debería ser un archivo con código, ¿cómo puedo mostrar el texto del código?

10voto

moshe Puntos 86

Casi todos los ordenadores modernos trabajan con bytes, en lugar de bits individuales. Como ya sabrás, un byte puede almacenar 256 valores diferentes, desde ocho ceros hasta ocho unos.

Cuando abres el archivo binario en un editor de texto, te muestra estos trozos del tamaño de un byte en lugar de cada bit individual. Los símbolos que elige están determinados por la codificación por defecto de tu editor. A menudo, un carácter en tu editor corresponde a un byte en el archivo real, aunque hay casos especiales.

Si ve una cadena de texto legible, como por ejemplo __stub_helper significa que un texto concreto se almacena tal cual en el archivo binario.

Los casos especiales que he mencionado antes son los llamados caracteres de control que se muestran con un código de escape. Los códigos de escape, como se ve aquí, empiezan por ^ y van seguidos de un único carácter adicional. Este par, como ^@ se toman juntos para representar un único byte. De hecho, el símbolo ^@ es el valor cero, lo que significa que los bits en esa posición serían ocho ceros.

La razón por la que su editor de texto muestra el archivo binario de esta manera es que simplemente muestra todos los archivos de esta manera. Si utilizara un editor hexadecimal, mostraría todos y cada uno de los archivos en hexadecimal. De hecho, no hay ninguna diferencia fundamental entre el contenido de un archivo binario y el de un archivo de texto: son los metadatos y las cabeceras de los archivos los que permiten a tu ordenador saber cuál es cuál.

7voto

Oskar Puntos 1242

Inicio vi en modo binario - entonces puede ejecutar xxd para obtener la vista hexadecimal, la vista binaria y editar el archivo como lo harías. (Por supuesto, la mayoría de estos son de sólo lectura, pero eso no es sobre el editor y más de los permisos / SIP).

vi -b /bin/ps

A continuación, para convertir el búfer en bits de 1 y 0

:%!xxd -b

Entonces podrás ver todas las bondades del binario ejecutable Mach-0, directamente desde el editor. Si eliminas la b, obtienes la representación hexidecimal más típica que es una codificación más eficiente en espacio y no ves los valores mapeados como caracteres derivados ASCII donde tantos valores terminan como ^@^@^@ cuando se parte de un valor por defecto centrado en el texto plano.

0 votos

Además, no tienes que empezar vi en modo binario, sólo ayuda con algunos ajustes menores. El :%! funciona en todo el búfer y lo pasa a xxd -b haciendo el trabajo pesado dentro del editor por ti.

1voto

FeRD Puntos 109

La respuesta más sencilla a su pregunta es: Por eficacia. Como otros han dicho en sus respuestas, los archivos se muestran utilizando una notación más compacta que el código binario en bruto, porque el código binario en bruto es insondablemente ineficaz como medio de comunicación de datos.

Toma el ps programa que ha visualizado utilizando vi . No estoy seguro de la versión MacOS del comando, pero en mi sistema Fedora 30 /bin/ps es un ejecutable enlazado dinámicamente (es decir, parte de su código se carga desde otros archivos del disco) que, sin embargo, tiene un tamaño de archivo de unos 158k, o para ser precisos, un tamaño de archivo de 157224 bytes.

Dado que cada byte de memoria contiene 8 bits, se necesitaría una cadena de ocho 1 o 0 dígitos a mostrar cada byte individual del /bin/ps archivo. Lo que significa que, si tuviera que mostrar todo el contenido del archivo como una cadena de sólo 1 o 0 esa cadena sería 1257792 (es decir, uno y cuarto millones ).

Y eso que es un archivo relativamente pequeño. Piense en el contenido de un disco Blu-Ray, que puede llegar fácilmente a varias decenas de gigabytes. Una película de 80 gigabytes tendría una representación puramente binaria que requeriría 640.000 millones 1 / 0 dígitos.

0 votos

La eficiencia no es el tema aquí, IMHO. Un byte es un byte, lo que estamos viendo son diferentes representaciones en la pantalla. Que el valor 65 (decimal) se muestre como 'A', 0x41 o 00100001 no cambia el hecho de que sólo necesita un byte en disco (o en memoria).

1 votos

@nohillside Oh, pero visual La eficiencia es exactamente el tema. Me refiero a que, a pesar de que (de acuerdo) las tres representaciones que has mencionado tienen exactamente el mismo tamaño en disco, basta con mirarlas para ver lo mucho que varían en representación - y la pregunta era: "¿Por qué no es el archivo se muestra como unos y ceros?"

0 votos

Se muestran como son porque vi no le importa el tipo de archivo, sólo lanza los bytes a la pantalla (por así decirlo). Si abres archivos de texto con un editor hexadecimal, tampoco verás el texto en sí, sino sólo los valores hexadecimales.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X