как распаковать структуру с типом uint16_t в python

#python #c #struct #binary #elf

Вопрос:

Я пытаюсь распаковать ElfHeader на python. Тип структуры e_type in Elf64_Edhr-uint16_t, как я могу ее распаковать? Я нашел способ распаковать 4-битный unsigned int только в документах структуры python.

Комментарии:

1. struct Еще раз посмотрите документацию по модулю. Код формата для unsigned short таков H .

2. Спасибо, вы правы.

Ответ №1:

Вероятно, каждая машина, поддерживаемая Python, имеет 8 бит на байт, поэтому 16-разрядное целое число использует 2 байта. Мы хотим, чтобы размер был одинаковым на каждой машине, поэтому мы смотрим на столбец стандартного размера. Формат для целого числа без знака со стандартным размером 2 байта или 16 бит таков H .

Чтобы стандартный размер был уместен, unpack шаблон должен начинаться с < > , ! или = в зависимости от конечного размера. ELF поддерживает как малые, так и большие конечные значения в зависимости от байта со смещением 0x05 файла, поэтому ваш шаблон будет начинаться с одного < или > в зависимости от того, какой конец файла.

  • Если байт со смещением 0x05 равен 1 , это файл с небольшим концом, поэтому ваш шаблон должен начинаться с < .

    ФАЙЛ uint16_t 0x3456 = 13398 равен b'x56x34'

     >>> x = b'x56x34'
    >>> struct.unpack('<H', x)
    (13398,)
     
  • Если байт со смещением 0x05 равен 2 , это файл с большим концом, поэтому ваш шаблон должен начинаться с > .

    БЫТЬ uint16_t 0x3456 = 13398-это b'x34x56'

     >>> x = b'x34x56'
    >>> struct.unpack('>H', x)
    (13398,)