Как я могу найти динамические библиотеки, необходимые для ELF Binary в C ++?

Как я могу получить список всех динамических библиотек, которые требуются двоичному файлу elf в linux с использованием C ++?

После того, как мне удалось извлечь информацию (имя файла?) Из двоичного файла, я могу найти фактический файл, просматривая PATH, но я не смог найти никакой информации, касающейся извлечения неупорядоченной информации из двоичного файла ELF.

Мысли?

6

Решение

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

  1. парсить заголовок ELF, проверьте, что файл является динамическим исполняемым файлом (ET_EXEC или же ET_DYN).
  2. Получить смещение и количество заголовков программы (e_phoff/e_phnum/e_phentsize), убедитесь, что они ненулевые и действительные.
  3. разобрать заголовки программы, ищет PT_DYNAMIC один. Также запомните виртуальный адрес -> отображение смещения файла для PT_LOAD сегменты.
  4. Найдя, разобрать динамический раздел. Ищите DT_NEEDED а также DT_STRTAB записей.

d_val поле DT_NEEDED Записи смещение в DT_STRTABСтроковая таблица, которая будет SONAME необходимых библиотек. Обратите внимание, что с DT_STRTAB запись во время выполнения адрес а не смещение таблицы строк, вам необходимо сопоставить ее со смещением файла, используя информацию, сохраненную на шаге 3.

7

Другие решения

Вы можете вызвать программу «readelf -d» и проанализировать вывод:

readelf -d /usr/bin/readelf | grep NEEDED
0x0000000000000001 (NEEDED)             Shared library: [libz.so.1]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
5

По вопросам рекламы [email protected]