Strangeness offset Linux hexdump

2

J'essaie d'extraire quelques octets vers la fin d'un disque dur de 1 To. Commençons par regarder vers le début, 0x1000:

%  hexdump -n 16  -s 0x1000 -C /dev/sda2

00001000  08 70 b5 7c 20 4c 56 4d  32 20 78 5b 35 41 25 72  |.p.| LVM2 x[5A%r|

Et confirmant avec hexedit, nous voyons que hexdump a bien fonctionné:

00001000   08 70 B5 7C  20 4C 56 4D  32 20 78 5B  35 41 25 72

Maintenant le problème. hexedit montre vers la fin, à l'offset 0xE864544000:

64544000   FC 4E 2B A9  01 00 00 00  00 00 00 00  00 00 00 00

Pourquoi alors hexdump me montre-t-il les données en 0x7FFFFFFF quand je spécifie 0xE864544000 ...

%  hexdump -n 16  -s 0xE864544000 -C /dev/sda2

7fffffff  13 29 24 50 54 47 31 00  10 14 80 47 db 46 61 4e  |.)$PTG1....G.FaN|

Confirmer 0x7FFFFFFF:

%  hexdump -n 16  -s 0x7fffffff -C /dev/sda2

7fffffff  13 29 24 50 54 47 31 00  10 14 80 47 db 46 61 4e  |.)$PTG1....G.FaN|

J'ai essayé cela sur un autre Linux et je vois un comportement similaire. Est-ce un bug dans hexdump ou est-ce que je manque quelque chose?

hexeuse
la source

Réponses:

3

Le décalage maximal, '-s', que hexdump peut utiliser sur une installation Linux i686 est (2 ^ 31-1) ou 214783647 ou en hexa, 0x7FFFFFFF. Le nombre que vous essayez d'atteindre est bien au-delà de ce seuil. Comme @choroba l'a souligné, vous devez utiliser un noyau Linux 64 bits pour atteindre cette adresse.

cfreire
la source
Fonctionne sur ma machine (64bit).
Choroba
Cela ne fonctionne pas sur un i686, merci @choroba
cfreire
1
Soit vous utilisez une machine 32 bits, soit vous utilisez une version compilée 32 bits de hexdump. (ou les deux !!) Si vous êtes vraiment déterminé à regarder la fin du disque de 1 To, essayez dd if=/dev/bigdisk2 bs=1024M skip=1023 | hexdump ...ceci : cela va ignorer les 1023 premiers Go du disque, puis sortir le dernier Gig. Bien sûr, un disque TB n’est pas de 1024 Go, ajustez donc le nombre de manière appropriée, il s’agit d’un exemple conceptuel.
Lornix
Eh bien, je suis sur 64 bits, mais mon hexdump est de 32 ans. Merci
hexer
1
Cela m'a donné la sortie que je m'attendais en utilisant hexdump 32bit ... dd si = / dev / sda2 bs = 1 skip = 998115655680 | hexdump -n 16c
hexer