1

Я пытаюсь закодировать некоторые байты в конце жесткого диска емкостью 1 ТБ. Сначала давайте посмотрим ближе к началу, 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

Почему тогда hexdump показывает мне данные в 0x7FFFFFFF, когда я указываю 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|

Подтверждение 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 ответ1

2

Максимальное смещение, '-s', которое hexdump может использовать в установке i686 Linux, равно (2 ^ 31-1) или 214783647 или в шестнадцатеричном формате, 0x7FFFFFFF. Число, которое вы пытаетесь достичь, находится далеко за этим порогом. Как указывал @choroba, вы должны использовать 64-битное ядро Linux для достижения этого адреса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .