Ligne de commande pour inverser l'ordre des octets / modifier l'endianess
Je suis piratage dans certains scripts à essayer d'analyser certaines données écrites par Javas DataOutputStream#writeLong(...)
. Depuis java semble toujours écrire en big endian, j'ai un problème d'alimentation les octets à od
. Cela est dû au fait que od
suppose toujours que l'endianess correspond à l'endianess de l'arc que vous êtes actuellement sur, et je suis sur un petit-boutiste de la machine.
Je suis à la recherche d'un simple one-liner pour inverser l'ordre des octets. Disons que vous savez que les 8 derniers octets d'un fichier est un long écrit par l'un de ces writeLong(...)
méthode. Ma meilleure tentative pour imprimer ce terme est
tail -c 8 file | tac | od -t d8
mais tac
ne semble que le travail sur le texte (juste assez). J'ai trouvé quelques références à dd conv=swab
mais cela ne swaps octets par paires, et ne peut pas inverser ces huit octets.
Que quelqu'un connait un bon one-liner pour cela?
source d'informationauteur Alexander Torstling
Vous devez vous connecter pour publier un commentaire.
Eu recours à Perl en fin de compte. Utilisé un one-liner que j'ai trouvé à PERL Revêtements Un:
La
0777
séparateur char était un peu déroutant pour moi, mais cette à la page d'admin debian semble suggérer qu'il est un espace réservé pour le "pas de séparateur d'enregistrement', provoquant un inverse octet par octet.D'autres suggestions sont les bienvenues.
EDIT: Trouvé une autre commande dans un commentaire à la tac.c, que j'ai téléchargé de GNU coreutils:
Vous pouvez utiliser objcopy:
où num est 2 ou 4.
Note de la prochaine version de GNU coreutils (>= 8.23) permettra d'ajouter l'option --endian={peu,grandes} option pour les od de commande
Je suis venu avec cette Perl en ligne de commande pour convertir des entiers de 4 octets à partir d'un stockage à l'autre:
Que, probablement, fonctionne très bien sur de vraies machines Linux, Cygwin mais peu de me à la fin, le traitement, le fichier binaire sous forme de texte et d'insérer un 0x0D (aka CR) avant chaque 0x0A octet (aka saut de ligne). Mais si vous pipe à
cat -
il semble pour le laisser seul. Cela fonctionne pour moi:BASH:
À être un peu plus robuste selon le style de sortie de
od
il peut avoir besoin de compresser des espaces ( insérer"| sed 's/ *//g'"
après law8
).Utilisé dd, Luke!