Перечислите все разделы ELF всех общих загруженных объектов - PullRequest
4 голосов
/ 02 февраля 2012

Я ищу хороший способ перечисления всех секций ELF и их адресов текущего двоичного файла и всех общих объектов, которые мог бы загрузить текущий процесс.

Я знаю о существовании dl_iterate_phdr (), которое даетмне простой в использовании список ELF сегментов , но я ищу ELF секций , так что это не правильный вызов для меня.

Мне все равноо переносимости, пока он работает на Linux с ELF, я счастлив!

Любая подсказка приветствуется!

Ответы [ 3 ]

3 голосов
/ 02 февраля 2012

Это звучит как очень плохая идея, но если у вас есть законное применение, я бы просто проанализировал /proc/self/maps и открыл указанные файлы. Нет оснований полагать, что заголовки разделов даже отображаются в памяти; по всей вероятности, они расположены сразу после .data на диске и, следовательно, будут перезаписаны нулями для .bss, когда общий объект отображается в памяти.

Как только вы откроете файлы, вы можете использовать libbfd, но я бы просто использовал elf.h напрямую. Легко проследить Ehdr до Shdr таблицы.

3 голосов
/ 02 февраля 2012

Я предполагаю, что вы пытаетесь получить программный доступ к этой информации из программы на C / C ++.Я подозреваю, что вы сможете делать то, что хотите, с библиотекой двоичных файлов GNU (BFD), которая используется для реализации компоновщика GNU, objdump и т. Д.статья ).См., В частности, раздел 2.6 руководства, которое посвящено разделам.BFD создает связанный список « struct bfd_section », доступ к которому осуществляется через член «section» struct bfd .Я думаю, что вы сможете открыть текущий двоичный файл, используя bfd_fopen для argv [0].BFD поставляется с binutils .

1 голос
/ 02 февраля 2012

Команда readelf может сделать это, например, readelf -s

Это не тривиально, поэтому размещение ссылки на исходный код для readelf кажется лучшим выбором.Одной из причин этого является большое количество макросов, необходимых для обработки структур заголовков и секций.

http://rpm5.org/docs/api/readelf_8c-source.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...