выгрузка размеров структуры C из объектного файла ELF - PullRequest
12 голосов
/ 10 мая 2011

Как вы можете извлечь размеры всех структур C из объектного файла ELF с символами отладки?

Индивидуальные размеры структур можно получить из GDB с помощью «print sizeof (some_struct)», но мне нужно получить список всех структур.

Я посмотрел на "nm" и "objdump", но не вижу вариантов сделать то, что я ищу. Есть ли способ сделать это с помощью стандартных инструментов Unix, или мне нужно извлечь раздел символов отладки из файла ELF и обработать его самостоятельно? Я надеюсь, что это не последнее.

Заранее спасибо за любые советы. Ray

Ответы [ 4 ]

14 голосов
/ 10 мая 2011

pahole показывает эту и другие детали о структурах. Его мерзавец-репо находится на http://www.kernel.org/git/?p=linux/kernel/git/acme/pahole.git;a=summary.

11 голосов
/ 10 мая 2011

Вам придется копаться в разделе .debug_info, objdump выведет его для вас, если вы запустите его с параметром - dwarf .

Вы увидите ваши структуры там как * DW_TAG_structure_type *, а атрибут * DW_AT_byte_size * эквивалентен sizeof. Стандартного инструмента Unix должно быть достаточно для форматирования этих данных в более читаемый список.

4 голосов
/ 10 июля 2012

Установите пакет гномов, тогда у вас есть команда "pahole".

Используйте команду "pahole" для объектного файла elf, вы можете получить всю информацию о структуре, или вы можете использовать параметр "-C", чтобы указать имя структуры, например:

$ pahole vmlinux -C task_struct

0 голосов
/ 10 мая 2011

Если кто-то еще не знает что-то, я думаю, вам придется обработать вывод nm.

Тем не менее, nm только дает вам начало каждой структуры и ничего не знает о ее конце, поэтому даже это может не сработать, если за каждой стойкой сразу не последует какой-то другой символ.Остерегайтесь этой проблемы!

...