Je cherchais comment faire un vidage hexadécimal inversé et j'ai trouvé xxd mentionné. Cependant, il ne semble pas fonctionner avec simplement:
xxd -r hexdumpfile > binaryfile
J'ai ensuite comparé la différence entre les sorties de xxd infile
et hexdump infile
, et trouvé trois différences:
- La sortie xxd a deux points après l'adresse
- La sortie xxd a les positions dans les données inversées (par exemple,
5a42
dans la sortie hexdump devient425a
dans la sortie xxd) - Il y a quelques caractères supplémentaires après chaque ligne
Je n'ai que la version hexdumped de certains fichiers sur un serveur. Comment puis-je récupérer correctement les données binaires en utilisant xxd?
linux
conversion
hexdump
xxd
tanon
la source
la source
hexdump
vous permet de choisir l'endianité utilisée dans sa sortie, ce qui pourrait rendre cela plus simple. (Pourquoi maintenant?Réponses:
Il n'y a pas une seule commande à ma connaissance qui fera la conversion, mais elle peut facilement être divisée en quelques étapes:
hexdump
sortie à l'aide desed
xxd
5a42
devient425a
) en utilisantdd
Voici la commande complète:
la source
Cette réponse est une publication croisée de https://stackoverflow.com/a/52834021/6770384
Vous pouvez effectuer la conversion en une seule
sed
commande. Il suffit d'ajouter le:
après l'adresse et de changer l'endianité (passageab12
à12ab
).Bogues connus (voir la section des commentaires)
hexdump
éditées à l'aide d'un*
.la source
hexdump
peut masquer des parties répétées à l'aide d'un*
. Cette commande ne peut pas non plus restaurer correctement ces parties. Exemple:yes | head -n100 | hexdump | sed -E 's/ /: /;s/ (..)(..)/ \2\1/g' | xxd -r
imprime seulement 8y
au lieu de 100. La réparation de ces choses nécessiterait plus que ce one-liner. Peut-être que j'ajouterai un autre script à l'avenir.*
astuce, je ne savais pas!