Voulez-vous voir le texte dans un fichier binaire ou de données? Sous Linux strings
La commande extrait ces extraits de texte, appelé “chaînes”, pour toi.
Linux regorge de commandes qui peuvent sembler être des solutions aux problèmes. Les strings
La commande tombe définitivement dans ce domaine. Quel est votre objectif? Y a-t-il un point dans une commande qui répertorie les chaînes imprimables à partir d'un fichier binaire?
Prenons du recul. Fichiers binaires, comme les fichiers de programme, peut contenir des chaînes de texte lisibles par l'homme. Mais, Comment peux-tu les voir? Si tu utilises cat
O less
vous vous retrouverez probablement avec une fenêtre de terminal suspendue. Les programmes conçus pour fonctionner avec des fichiers texte ne fonctionnent pas correctement si des caractères non imprimables sont entrés via eux..
La plupart des octets d'un fichier binaire ne sont pas lisibles par l'homme et ne peuvent pas être imprimés dans la fenêtre du terminal d'une manière logique. Il n'y a pas de caractères ou de symboles standard pour représenter des valeurs binaires qui ne correspondent pas à des caractères alphanumériques, ponctuation ou blancs. Dans l'ensemble, ceux-ci sont connus comme des caractères “imprimables”. les autres sont des personnages “non imprimable”.
Pour cela, essayer d'afficher ou de rechercher des chaînes de texte dans un fichier binaire ou de données est un obstacle. Et c'est là que strings
Entrez. Extrait fichier de chaînes imprimables afin que d'autres commandes puissent utiliser les chaînes sans avoir à gérer des caractères non imprimables.
Utilisation de la commande strings
Il n'y a rien de compliqué là-dedans strings
commander, et son utilisation de base est très facile. Nous fournissons le nom du fichier que nous désirons strings
rechercher sur la ligne de commande.
Ici, nous utiliserons des chaînes dans un fichier binaire, un fichier exécutable, appelé “jibber”. On a écrit strings
, un espace, “jibber” puis appuyez sur Entrée.
cordes jibber
Les chaînes sont extraites du fichier et répertoriées dans la fenêtre du terminal.
Réglage de la longueur de corde minimale
Par défaut, strings recherchera des chaînes de quatre caractères ou plus. Pour déterminer une longueur minimale plus courte ou plus longue, Utilisez le -n
(Longueur minimale) option.
Notez que plus la longueur minimale est courte, plus vous avez de chances de voir plus de déchets.
Certaines valeurs binaires ont la même valeur numérique que la valeur que représente un caractère imprimable. Si deux de ces valeurs numériques sont côte à côte dans le fichier et que vous spécifiez une longueur minimale de deux, ces octets seront rapportés sous forme de chaîne.
Demander strings
utiliser deux comme longueur minimale, utilisez la commande suivante.
chaînes -n 2 jibber
Maintenant, nous avons deux chaînes de lettres incluses dans les résultats. Notez que les espaces sont comptés comme un caractère imprimable.
Tubes à cordes à travers Less
En raison de la longueur de la sortie strings
, nous allons le canaliser less
. Ensuite, nous pouvons faire défiler le fichier à la recherche de texte d'intérêt.
cordes jibber | moins
La liste nous est maintenant présentée à less
, avec le haut de la liste affiché en premier.
Utiliser des chaînes avec des fichiers objets
Régulièrement, les fichiers source du programme sont compilés dans des fichiers objets. Ceux-ci sont liés à des fichiers de bibliothèque pour créer un fichier exécutable binaire. Nous avons le fichier de l'objet jibber à portée de main, alors jetons un coup d'oeil à l'intérieur de ce fichier. Notez l'extension de fichier “.O”.
jibber.o | moins
Le premier ensemble de chaînes est enveloppé dans la colonne huit s'il contient plus de huit caractères. S'ils ont été ajustés, un personnage apparaît “H” dans la colonne neuf. Vous pouvez reconnaître ces chaînes en tant qu'instructions SQL.
Faire défiler la sortie révèle que ce format n'est pas utilisé dans tout le fichier.
Il est intéressant de voir les différences dans les chaînes de texte entre le fichier objet et l'exécutable fini.
Rechercher dans des zones spécifiques du fichier
Les programmes compilés ont différentes zones en eux-mêmes qui sont utilisées pour stocker du texte. Par défaut, strings
recherche du texte dans tout le fichier. C'est comme si vous utilisiez le -a
(Tout le monde) option. Pour les chaînes à rechercher uniquement sur les sections de données chargées et initialisées dans le fichier, Utilisez le -d
option (Les données).
cordes -d jibber | moins
Sauf si vous avez une bonne raison de le faire, vous pouvez également utiliser les paramètres par défaut et rechercher l'intégralité du fichier.
Impression offset à chaînes
Nous pouvons avoir strings
imprime le décalage depuis le début du fichier dans lequel se trouve chaque chaîne. Pour faire ceci, utiliser el -o
(compensation) option.
chaînes -o parse_phrases | moins
Le déplacement se produit dans Octal.
Pour afficher l'offset dans une base de nombres différente, sous forme décimale ou hexadécimale, Utilisez le -t
(base) option. L'option radix doit être suivie de d
(décimal), x
(hexadécimal), O o
(Octal). À l'aide de -t o
est la même chose que d'utiliser -o
.
strings -t d parse_phrases | moins
Les décalages sont maintenant imprimés en décimal.
chaînes -t x parse_phrases | moins
Les décalages sont maintenant imprimés en hexadécimal.
Y compris les blancs
strings
considère que les caractères de tabulation et d'espace font partie des chaînes qu'il trouve. Autres caractères d'espace blanc, comme les nouvelles lignes et les retours chariot, ne sont pas traités comme s'ils faisaient partie des chaînes. Les -w
L'option (espace vide) fait que les chaînes traitent tous les caractères d'espacement comme s'ils faisaient partie de la chaîne.
chaînes -w add_data | moins
Nous pouvons voir la ligne vide à la sortie, qui est le résultat du retour chariot (invisible) et les caractères de nouvelle ligne à la fin de la deuxième ligne.
Nous ne sommes pas limités aux fichiers
On peut utiliser strings
avec quoi que ce soit, ou peut produire, un flux d'octets.
Avec cette commande, nous pouvons regarder à travers mémoire vive (RAM) depuis notre ordinateur.
Nous devons utiliser sudo
parce que nous accédons / développeur / mem. Il s'agit d'un fichier de périphérique de caractère qui contient une image de la mémoire principale de votre ordinateur.
chaînes sudo /dev/mem | moins
La liste n'est pas le contenu complet de votre RAM. C'est juste les ficelles qu'on peut en tirer.
EN RELATION: Que signifie “tout est un fichier” fr Linux?
Rechercher plusieurs fichiers en même temps
Les caractères génériques peuvent être utilisés pour choisir des groupes de fichiers à rechercher. Les *
caractère représente plusieurs caractères, et le ?
caractère représente n'importe quel caractère. De plus, vous pouvez choisir de fournir de nombreux noms de fichiers sur la ligne de commande.
Nous allons utiliser un caractère générique et rechercher tous les fichiers exécutables dans le répertoire / poubelle. Parce que la liste contiendra les résultats de nombreux fichiers, nous utiliserons le -f
option (nom de fichier). Cela imprimera le nom du fichier au début de chaque ligne. Ensuite, nous pouvons voir dans quel fichier chaque chaîne a été trouvée.
Nous canalisons les résultats à travers grepet la recherche de chaînes contenant le mot “droits d'auteur”.
chaînes -f /bin/* | grep Copyright
Nous obtenons une liste ordonnée des déclarations de droit d'auteur pour chaque fichier du répertoire / poubelle, avec le nom du fichier au début de chaque ligne.
cordes démêlées
Les cordes n'ont pas de mystère; est une commande Linux typique. Il fait quelque chose de très précis et il le fait très bien.
C'est un autre rouage de Linux et il prend vraiment vie lorsqu'il fonctionne avec d'autres commandes.. Quand vous voyez comment vous pouvez passer entre les fichiers binaires et d'autres outils comme grep
, commencer à apprécier la fonctionnalité de cette commande un peu sombre.
setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);