LINUX.ORG.RU

Работа с шеснадцатеричным представлением в bash: парсинг вывода hexdump

 ,


0

1

Доброго времени суток

Сейчас изучаю логическую структуру жесткого диска, и вот например я хочу увидеть таблицу разделов на MBR флешки(/dev/sdb) описание структуры тут.
ну делаю:

# head -c 512 /dev/sdb | tail -c 66 | [i]hexdump -C[/i]
00000000  80 01 01 00 83 f8 fe fc  3e 00 00 00 d8 82 f0 00  |........>.......|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000040  55 aa                                             |U.|
00000042
или
# head -c 512 /dev/sdb | tail -c 66 | [i]hexdump[/i]
0000000 0180 0001 f883 fcfe 003e 0000 82d8 00f0
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
0000040 aa55
0000042

получаю из нужного соответсвенно 80 01 01 00 83 f8 fe fc 3e 00 00 00 d8 82 f0 00 и 0180 0001 f883 fcfe 003e 0000 82d8 00f0 можно ли как нибудь при помощи баша или питона получить значение смещения в полной форме то есть законченное число без разделений на байты и слова?

что то ничего не нашел по длине слов в выводе hexdump еще. Но важно знать, как сделать преобразование.

Cопутствующий косвенный вопрос, необязательный к ответу: у меня на жестком аж 6 разделов, один первичный, я так понял именно из за MBR не может быть больше 4-х primary разделов?



Последнее исправление: OlegUP (всего исправлений: 1)

man xxd

В MBR под таблицу разделов выделено 64 байта. Каждая запись занимает 16 байт. Таким образом, всего на жестком диске может быть создано не более 4 разделов. Когда разрабатывалась структура MBR, это считалось достаточным. Однако, позднее был введён дополнительный раздел, структура которого (EBR) позволяет создавать внутри него неограниченное число логических дисков (разделов).

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

не нужно писать такое на запускалке пайпов

anonymous
()

в общем, теперь, когда я понял что таблица 2 в структуре относится к тем 16 байтам в MBR, (до этого думал, что эта информация находится в начале раздела, недоумевал по этому поводу кстати, ничего не совпадало) вопрос можно закрывать, но все таки интересно, как привести такое разделенное на 2байтовое слово числа к верной форме при помощи bash или хотя бы python\perl

OlegUP
() автор топика
Ответ на: комментарий от OlegUP

на python читаем напрямую 512 байт и парсим весь mbr в готовый набор значений одним struct.unpack

anonymous
()
Ответ на: комментарий от OlegUP

Если правильно понял, что нужно, то группировку по четыре байта можно получить, например, так:

hexdump -e '8/4 "0x%08x, "' -e '"\n"'
Формат вывода специфичный, тут надо справку по hexdump читать, чтобы правильно его задавать.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.