我正在尝试对 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 内核才能到达该地址。