Linux 十六进制转储偏移奇怪之处

Linux 十六进制转储偏移奇怪之处

我正在尝试对 1 TB 硬盘驱动器末尾附近的一些字节进行十六进制转储。首先,让我们看看开头附近的 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|

并使用 hexedit 进行确认,我们看到 hexdump 工作正常:

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

现在的问题是。hexedit 显示接近末尾,偏移量为 0xE864544000:

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

那么为什么当我指定 0xE864544000 时,hexdump 会显示 0x7FFFFFFF 处的数据......

%  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|

确认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|

我在另一个 Linux 上尝试了此操作,看到了类似的行为。这是 hexdump 中的错误还是我遗漏了什么?

答案1

在 i686 Linux 安装中,hexdump 可以使用的最大偏移量“-s”为 (2^31-1) 或 214783647,或十六进制的 0x7FFFFFFF。您尝试达到的数字远远超出了此阈值。正如 @choroba 指出的那样,您必须使用 64 位 Linux 内核才能到达该地址。

相关内容