Ответ 1
pahole показывает эту и другие подробности о структурах. Его репозиторий git находится в http://www.kernel.org/git/?p=linux/kernel/git/acme/pahole.git;a=summary.
Как вы можете извлечь размеры всех структур C из объектного файла ELF с помощью отладочных символов?
Отдельные размеры структур могут быть получены из GDB с использованием "print sizeof (some_struct)", но мне нужно получить список всех структур.
Я посмотрел на "nm" и "objdump", но я не вижу вариантов делать то, что ищу. Есть ли способ сделать это со стандартными инструментами Unix, или мне нужно извлечь раздел отладочного символа из файла ELF и обработать его самостоятельно? Я надеюсь, что это не последнее.
Заранее благодарим за любой совет. Ray
pahole показывает эту и другие подробности о структурах. Его репозиторий git находится в http://www.kernel.org/git/?p=linux/kernel/git/acme/pahole.git;a=summary.
Вам придется копать в разделе .debug_info, objdump сбрасывает его для вас, если вы запустите его с параметром -dwarf.
Вы увидите свои структуры там, где атрибут * DW_TAG_structure_type * и * DW_AT_byte_size * эквивалентен sizeof. Стандартного инструмента Unix должно быть достаточно, чтобы отформатировать эти данные в более читаемом списке.
Установите пакет гномов, тогда у вас есть команда "pahole".
Используйте команду "pahole" в отношении объектного файла эльфа, вы можете получить всю информацию о структуре, или вы можете использовать параметр "-C" для конкретного имени структуры, например:
$pahole vmlinux -C task_struct
Если кто-то еще что-то не знает, я думаю, вам придется обрабатывать вывод nm.
Тем не менее, nm только дает вам начало каждой структуры и ничего не знает о ее конце, поэтому даже это может не сработать, если за каждой стойкой сразу следует какой-то другой символ. Следите за этой проблемой!