La commande * nix suivante représente une représentation hexadécimale d'une adresse IP et d'un port (127.0.0.1:80) dans la commande hexdump.Endianness dans Unix hexdump
printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
L'indicateur -e permet un format arbitraire pour analyser l'entrée. Dans ce cas, nous analysons les trois premiers octets de l'adresse IP en décimales non signées suivies d'un point. L'octet final est également analysé en un nombre décimal non signé, mais il est suivi d'un deux-points. Enfin - et c'est là que se situe le problème - les 2 octets du port sont analysés comme une seule décimale non signée suivie d'une nouvelle ligne.
En fonction de l'endianness du système exécutant cette commande, le résultat sera différent. Un système big-endian affichera correctement le port 80; tandis qu'un système little-endian affichera le port 20480.
Existe-t-il un moyen de manipuler hexdump pour être conscient de l'endianness tout en permettant la spécification de format arbitraire via -e?
Je suppose qu'il n'est pas acceptable d'avoir à préparer l'entrée en échangeant les deux derniers octets si la plate-forme est little-endian, puisque vous posez la question? –
Est-ce que cela ressemble à un échange d'octets sera nécessaire? – shrizza