2017-04-06 2 views
2

Plutôt une question de débutant mais je suis resté bloqué pendant un certain temps: J'ai un problème pour lire et analyser une chaîne stockée sur le disque dur à l'adresse que je connais ...Lecture d'une chaîne terminée par un caractère nul à partir de la variable od dans MINIX cendre

Je ne connais pas la longueur de la chaîne, seulement sa longueur maximale est n. Il a été écrit dans n -buffer initié avec des zéros, donc son hexdump est comme xx xx xx xx 00 00 00 00 00xx sont hexadécimaux pour les caractères string appropriés.

Alors que je connais l'adresse de la chaîne, je le copier dans le fichier binaire tmp en utilisant l'aide dd if=<hd> of=tmp (avec bs/nombre approprié/saut pour obtenir les n octets de la mémoire tampon). Puis, en bash (ou plutôt dans les cendres MINIX pour être précis) je tente d'utiliser od pour analyser et lire dans la variable mais je ne peux pas me débarrasser des espaces/nulls:

name=$(od -Anx -tc tmp) 
echo $name 

et je reçois J O H N \0 \0 \0 \0 \0 au lieu de simplement JOHN

+0

Vous pouvez essayer le passer par 'strings' si elle est une chaîne semblable. –

+0

'name = $ (od -Anx -tc <(sed 's/\ x00 // g' tmp))' – 123

+0

Pouvez-vous coller ici la sortie de 'cat -e tmp'? –

Répondre

1

Vous pouvez utiliser une astuce simple qui repose sur le fait que bash strings cannot contain a NUL character:

name="$(cat tmp)" 
echo $name 
+0

Cela fonctionne bien sous bash .. mais j'étais imprécis au début (désolé pour cela) - J'en ai besoin pour travailler sous MINIX 3 shell (ash). Ash produit une chaîne vide pour cela. Quoi qu'il en soit, bon de savoir le tour, merci – micsza

+0

Je trouve "... utilisant ** bash ** et od" pour être tout à fait "* précis *" :) –

+0

Pas de soucis. Pouvez-vous essayer 'name = $ (cat tmp)'? Je pense que cela devrait fonctionner dans 'ash' aussi bien ... –