#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,)