Как я могу получить список всех динамических библиотек, которые требуются двоичному файлу elf в linux с использованием C ++?
После того, как мне удалось извлечь информацию (имя файла?) Из двоичного файла, я могу найти фактический файл, просматривая PATH
, но я не смог найти никакой информации, касающейся извлечения неупорядоченной информации из двоичного файла ELF.
Мысли?
Список необходимых общих объектов хранится в т.н. динамический раздел исполняемого файла. Примерный алгоритм получения необходимой информации будет выглядеть примерно так:
ET_EXEC
или же ET_DYN
).e_phoff/e_phnum/e_phentsize
), убедитесь, что они ненулевые и действительные.PT_DYNAMIC
один. Также запомните виртуальный адрес -> отображение смещения файла для PT_LOAD
сегменты.DT_NEEDED
а также DT_STRTAB
записей. d_val
поле DT_NEEDED
Записи смещение в DT_STRTAB
Строковая таблица, которая будет SONAME необходимых библиотек. Обратите внимание, что с DT_STRTAB
запись во время выполнения адрес а не смещение таблицы строк, вам необходимо сопоставить ее со смещением файла, используя информацию, сохраненную на шаге 3.
Вы можете вызвать программу «readelf -d» и проанализировать вывод:
readelf -d /usr/bin/readelf | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]