Następujące polecenie * nix przetwarza szesnastkową reprezentację adresu IP i portu (127.0.0.1:80) w poleceniu hexdump.Endianness in hexx hexdump
printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
Flaga -e umożliwia dowolne formatowanie danych wejściowych. W tym przypadku analizujemy pierwsze trzy oktety adresu IP na niepodpisane miejsca dziesiętne, po których następuje kropka. Końcowy oktet jest również przetwarzany na dziesiętne bez znaku, ale po nim następuje dwukropek. Wreszcie - i tu leży problem - 2 bajty dla portu są analizowane jako pojedynczy dziesiętny bez znaku, po którym następuje znak nowej linii.
W zależności od endianness systemu wykonującego to polecenie, wynik będzie się różnić. System big-endian poprawnie wyświetli port 80; mając na uwadze, że system z małym endianem wyświetli port 20480.
Czy istnieje sposób na manipulowanie hexdumpem, aby być świadomym endianizmu, a jednocześnie pozostawić dowolną specyfikację formatu przez -e?
Zakładam, że nie jest do przyjęcia, aby przygotować dane wejściowe, zamieniając dwa ostatnie bajty, jeśli platforma jest mało-endian, ponieważ zadajesz pytanie? –
Czy to wygląda jak zamiana bajtów będzie konieczne? – shrizza