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 ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.