Подтвердить что ты не робот

Демпинговые размеры структуры C из объектного файла ELF

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

Отдельные размеры структур могут быть получены из GDB с использованием "print sizeof (some_struct)", но мне нужно получить список всех структур.

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

Заранее благодарим за любой совет. Ray

4b9b3361

Ответ 2

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

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

Ответ 3

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

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

$pahole vmlinux -C task_struct

Ответ 4

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

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