Différentes versions de strings
ont existé. La plupart d'entre eux recherchent simplement un certain nombre (quatre ou plus) de caractères ASCII imprimables et décident, sans contexte, qu'ils ont trouvé une "chaîne" lisible par l'homme. C'est ce qui semble se produire avec le programme strings
commande.
GNU gstrings
semble être beaucoup plus intelligent. Je n'ai pas gstrings
installé, mais il semble utiliser une heuristique un peu plus intelligente que la simple recherche de caractères ASCII imprimables. (Il y a 40 ans, dans un cours de programmation en C que j'ai suivi, l'un de nos devoirs était d'écrire une meilleure version de strings
. Ce n'était pas très difficile !)
Pour mieux comprendre l'écart, je vous suggère d'utiliser un autre utilitaire, hexdump
.
hexdump -C /bin/ls
vous montrera les codes hexadécimaux dans un tableau pour chaque octet du fichier, avec les interprétations ASCII à la fin de chaque ligne :
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......|
Comme vous pouvez le constater, les mêmes "vraies" chaînes de caractères lisibles par l'homme que celles présentées à droite se trouvent également dans le fichier gstrings
de la production.
La réponse est donc simple : GNU strings
fait un meilleur travail que la version par défaut de BSD strings
.