Il seguente comando * nix convoglia una rappresentazione esadecimale di un IP e di una porta (127.0.0.1:80) nel comando hexdump.Endianness in Unix hexdump
printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
Il flag -e consente a un formato arbitrario di analizzare l'input. In questo caso, stiamo analizzando i primi tre ottetti dell'IP in decimali non firmati seguiti da un punto. L'ottetto finale viene anche analizzato in un decimale senza segno, ma è seguito da due punti. Infine - ed è qui che si trova il problema - i 2 byte per la porta vengono analizzati come un singolo decimale senza segno seguito da una nuova riga.
A seconda della endianità del sistema che esegue questo comando, il risultato sarà diverso. Un sistema big-endian mostrerà correttamente la porta 80; mentre un sistema little-endian mostrerà la porta 20480.
C'è un modo per manipolare hexdump per essere a conoscenza di endianness pur consentendo la specifica del formato arbitrario via -e?
Suppongo che non sia accettabile dover preparare l'input scambiando gli ultimi due byte se la piattaforma è little-endian, dal momento che stai ponendo la domanda? –
Sembra che sia necessario uno scambio di byte? – shrizza