Определение того, упакована ли структура C или нет - PullRequest
0 голосов
/ 12 декабря 2018

Я извлекаю структуру структуры C и выполняю ее с помощью gdb-python.

Мне удается получить все поля, смещения, типы и размеры.

Тем не менее, при попытке повторно-генерировать код структуры, у меня нет никаких указаний на то, была ли она помечена GCC attribute((__packed__)).

Есть ли способ получить эту информацию из исполняемого файла?(желательно используя gdb-python, но любой другой способ тоже подойдет)

1 Ответ

0 голосов
/ 12 декабря 2018

Есть ли способ получить эту информацию из исполняемого файла?

Нет, но вы должны быть в состоянии вывести это с помощью простой эвристики:

  • если sizeof(struct foo) больше, чем сумма размеров его полей-членов, структура не упаковывается.
  • , если sizeof(struct foo) равна сумме размеров его полей-членов, структура также равна упакован, или его элементы естественно выровнены без отверстий, и упаковка не имеет для него значения.
...