Инструмент для анализа размера секций ELF и символа

Мне нужен способ проанализировать выходной файл моего компилятора GCC для ARM. Я компилирую для голого металла, и я довольно обеспокоен размером. я могу использовать arm-none-eabi-objdump предоставленный кросс-компилятором, но анализ выходных данных - это не то, что я бы хотел сделать, если бы существовал инструмент для этой задачи. Знаете ли вы о существовании такого инструмента? Мой поиск не дал результатов.

Еще одна вещь, каждая функция в моем собственном коде находится в своем собственном разделе.

4 ответа

Решение

Ты можешь использовать nm а также size получить размер функций и разделов ELF.

Чтобы получить размер функций (и объектов со статической продолжительностью хранения):

$ nm --print-size --size-sort --radix=d tst.o

Второй столбец показывает размер в десятичном виде для функции и объектов.

Чтобы получить размер разделов:

$ size -A -d tst.o

Второй столбец показывает размер в десятичном виде разделов.

Утилита readelf удобна для отображения различной информации о разделах, включая размеры разделов, например:

arm-none-eabi-readelf -e foo.o

Если вас интересует объем памяти во время выполнения, вы можете игнорировать разделы, для которых не установлен флаг "A" (allocate).

При повторном рассмотрении этого вопроса 10 лет спустя необходимо упомянуть небольшую оболочку на основе Python для readelf и nm, которая называется elf-size-analyze:

puncover использует objdump и несколько других инструментов gcc для создания html-страниц, которые вы можете легко просмотреть, чтобы выяснить, куда идет ваш код и пространство данных.

Это гораздо более приятный интерфейс, чем текстовый вывод инструментов gcc.

Другие вопросы по тегам