узнать рамер функций и данных в elf-файле

Модератор: Модераторы разделов

Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

узнать рамер функций и данных в elf-файле

Сообщение savigm »

Дано: elf-файл, с различными секциями .text, .data, .rodata, .bss и т.д. Требуется: узнать размер всех функций, данных(переменных, массивов, структур и т.д.). Можно конечно лазить по дизассемблеру, но это весьма неблагодарное занятие, хотелось-бы в виде таблицы, причем в порядке убывания. Эксперименты с readelf и objdump пока не дали результатов. Буду всем очень признателен за помощь.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: узнать рамер функций и данных в elf-файле

Сообщение Alxn1 »

Мне почему-то кажется что это невозможно. Данные и функции лежат в разных секциях, а символы просто ссылаются на их начало. Размер для загрузки и выполнения не нужен, в общем-то.
Спасибо сказали:
Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

Re: узнать рамер функций и данных в elf-файле

Сообщение savigm »

Alxn1 писал(а):
20.04.2010 10:57
Мне почему-то кажется что это невозможно. Данные и функции лежат в разных секциях, а символы просто ссылаются на их начало. Размер для загрузки и выполнения не нужен, в общем-то.

Ну а как-же тогда я получаю дизассемблер из ельфа с детальной информацией по всем секциям и их соодержимому (функции, переменные, константы) вплоть до каждой команды и слова данных.
Можно пользоваться дизассемблером для определения размеров всего кода и данных, но это крайне неудобно, должно-же быть встроенное средство для этих целей: objdump или readelf.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: узнать рамер функций и данных в elf-файле

Сообщение watashiwa_daredeska »

savigm писал(а):
20.04.2010 14:42
как-же тогда я получаю дизассемблер из ельфа с детальной информацией по всем секциям и их соодержимому (функции, переменные, константы) вплоть до каждой команды и слова данных.
С нормальными именами? Из отладочной информации. Без неё будет нечитабельная и непонимабельная каша.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: узнать рамер функций и данных в elf-файле

Сообщение watashiwa_daredeska »

savigm писал(а):
20.04.2010 14:42
Можно пользоваться дизассемблером для определения размеров всего кода и данных, но это крайне неудобно
Код создаётся не для удобства его хаканья, а для эффективного выполнения.

savigm писал(а):
20.04.2010 14:42
должно-же быть встроенное средство для этих целей: objdump или readelf.
Совершенно не обязательно должно быть встроенное средство для хаканья ELF. Для определения положения и размеров различных сущностей есть генерация map-файлов при сборке: man ld, / {7}-M 2 раза, опции -M и -Map.
Спасибо сказали:
Аватара пользователя
savigm
Сообщения: 127
ОС: openSUSE

Re: узнать рамер функций и данных в elf-файле

Сообщение savigm »

map скажет информацию по объектникам, которые он будет компоновать, поэтому не подходит.
Вот есть объектный elf файл, из него можно сделать дизассемблер, где будут отображены все функции и данные, где изветстны адреса функциий и данных, их соодержимое, а соответсвенно и размеры. Можно конечно и руками все оттуда выдергивать, но как-то это неуклюже получается, неужели в binutils нет нормальных средств? Если можно получить детальный дизассемблер, неужели нельзя получить менее детальную информацию о размерах функций и данных?
nm --size-sort выдает размер для данных, но не для кода.
Спасибо сказали: