2 votos

¿Diferencia entre /usr/bin/strings y gstrings de binutils?

Estoy corriendo MacOS BigSur 11.6.5 (20G527) y he instalado binutils con homebrew y proporciona una versión gnu de strings .

Tiene diferentes salidas para el mismo archivo, por ejemplo /bin/ls

%> strings /bin/ls | head
I9H0
J8I9H8
H9J0
O8H9J8
I9H
J(I9H(
H9J
O(H9J(
I9H@
JHI9HH

%> gstrings /bin/ls | head
__PAGEZERO
__TEXT
__text
__TEXT
__stubs
__TEXT
__stub_helper
__TEXT
__const
__TEXT

Me pregunto cómo funcionan las cadenas de Mac. ¿Por qué produce una salida diferente?

3voto

Michael Puntos 31

Varias versiones de strings han existido. La mayoría de ellos simplemente buscan un cierto número (cuatro o más) de caracteres ASCII imprimibles, y deciden, sin contexto, que ha encontrado una "cadena" legible por humanos. Este parece ser el caso de la strings comando.

GNU gstrings parece ser mucho más inteligente. No tengo gstrings instalado, pero parece que utiliza una heurística un poco más inteligente que la mera búsqueda de caracteres ASCII imprimibles. (Hace unos 40 años, en una clase de programación en C que tomé, una de nuestras tareas era escribir una versión mejor de strings . No era muy difícil).

Para entender mejor la discrepancia, te sugiero que utilices otra utilidad, hexdump .

hexdump -C /bin/ls le mostrará los códigos hexadecimales en una tabla para cada byte del archivo, con interpretaciones ASCII de los mismos al final de cada fila:

00000000  cf fa ed fe 07 00 00 01  03 00 00 00 02 00 00 00  |................|
00000010  13 00 00 00 10 07 00 00  85 00 20 00 00 00 00 00  |.......... .....|
00000020  19 00 00 00 48 00 00 00  5f 5f 50 41 47 45 5a 45  |....H...__PAGEZE|
00000030  52 4f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |RO..............|
00000040  00 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00  19 00 00 00 28 02 00 00  |............(...|
00000070  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
00000080  00 00 00 00 01 00 00 00  00 50 00 00 00 00 00 00  |.........P......|
00000090  00 00 00 00 00 00 00 00  00 50 00 00 00 00 00 00  |.........P......|

Como puede ver, las mismas cadenas "reales" legibles por humanos que se muestran a la derecha también están en el gstrings de salida.

Por lo tanto, la respuesta sencilla es que GNU strings hace un mejor trabajo que el BSD por defecto strings .

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