LINUX.ORG.RU

ELF


0

0
Никто не копался внутри их?
Проблема вот в чём:
как определить, какие из функций из какой библиотеки импортируются?
В PE файлах это просто: в секции idata каждой dll соответствует своя запись, в которой указаны ссылки на массивы имён и адресов функций, а в ELF все функции перечислены сплошным списком в таблице символов. Можно ли это установить исходя из инфо в самом ELF файле, или это делает линковщик на этапе загрузки файла в память?

> Можно ли это установить исходя из инфо в самом ELF файле

Можно (делает же это ldd). Еще readelf скажет много интересного.

> или это делает линковщик на этапе загрузки файла в память?

Делает.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner
Посмотрел, действительно много инфо, но откуда какую функцию берет не показывает. И objdump тоже к сожалению.
ldd может это делать по-другому: он может просмотреть библиотеки, ему всё равно их грузить, а я бы хотел этого избежать.
Интересно, что произойдёт если одно и тоже имя функции будет в разных либах?
KUser
() автор топика
> как определить, какие из функций из какой библиотеки импортируются?

никак.

> Можно ли это установить исходя из инфо в самом ELF файле

нет, нельзя. ELF by design не содержит жесткой информации a'la "foo находится в модуле bee".

> или это делает линковщик на этапе загрузки файла в память?

редактор связей идёт по доступным модулям и пытается разрешить зависимости символов путём "кто первый попал того и тапки".

// wbr
klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda
Ясно, этого я и боялся.

>редактор связей идёт по доступным модулям и пытается разрешить зависимости символов путём "кто первый попал того и тапки".

То есть при совпадении имён функций в либах результат линковки непредсказуем?

KUser
() автор топика
Ответ на: комментарий от KUser
> То есть при совпадении имён функций в либах результат линковки непредсказуем?

ну в самом общем случае да. впрочем, зависимости библиотек прописываются в програмных секциях NEEDED по одной на библиотеку. это собственно то, что получается в результате задания библиотеки при сборке через "-l<library>". их порядок относительно друг друга важен бо AFAIR разрешение идёт от первой к последней so кто первый того символ и разрешился.

// wbr
klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda
Да, я вот и обратил внимание, что имена либ есть, имена функций тоже, а связи между ними нет.
Видно придётся смотреть библиотеки при загрузке. Попробую разобраться с ld, ибо писать свой загрузчик не хочется

Благодарю за инфо!
KUser
() автор топика
Ответ на: комментарий от klalafuda
> впрочем, зависимости библиотек прописываются в програмных секциях 
> NEEDED по одной на библиотеку

в элементах DT_NEEDED секции .dynamic ;)
rei3er
()
Ответ на: комментарий от rei3er
> в элементах DT_NEEDED секции .dynamic ;)

да, пардон, именно там

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.