1

Тема: Динамічні бібліотеки

Ніде не можу знайти інформацію як ОС, а точніше та частина яка відповідає за запуск виконавчих файлів завантажує динамічні бібліотеки в область коду програми, куди вона їх завантажує? І взагалі як на рівні ОС працюють динамічні бібліотеки?
P.S. Мене цікавлять виконавчі файли ELF, ну відповідно і динамічні бібліотеки UNIX(*.so), а не Windows(*.dll).

2

Re: Динамічні бібліотеки

Я, якщо чесно, не маю зеленого уявлення, як це конкретно відбувається, але хіба динамічні бібліотеки завантажуються в область коду програми? Тоді в чому сенс їхньої динамічності?

3

Re: Динамічні бібліотеки

ну можливо я не зовсім розумію як вони працюють. Але вони, як мінімум, не займають місце в бінарнику, і вони не обов'язково мають повністю завантажуватись.

4

Re: Динамічні бібліотеки

Код для динамічних бібліотек написаний таким чином, що вони не використовують структур даних в своєму просторі, тільки дані іншої програми і стек. А далі все просто: програма просить систему завантажити в пам'ять бібліотеку (ось тут іде виграш: якщо бібліотека вже в пам'яті, то система просто повертає її адресу, і бібліотека використовується кількома програмами одночасно), потім так само просить знайти адресу функції в бібліотеці - і викликає ту функцію, як їй треба. Спроби викликати щось не те в бібліотеці (наприклад, адресу посеред фукнції як функцію) зупиняються системою.
Принаймні, так було 10 років тому, коли я операційні системи в універі здавав :)

Подякували: drWoZD1

5

Re: Динамічні бібліотеки

koala написав:

Код для динамічних бібліотек написаний таким чином, що вони не використовують структур даних в своєму просторі, тільки дані іншої програми і стек.

Ну це я знав.

koala написав:

А далі все просто: програма просить систему завантажити в пам'ять бібліотеку (ось тут іде виграш: якщо бібліотека вже в пам'яті, то система просто повертає її адресу, і бібліотека використовується кількома програмами одночасно), потім так само просить знайти адресу функції в бібліотеці - і викликає ту функцію, як їй треба. Спроби викликати щось не те в бібліотеці (наприклад, адресу посеред фукнції як функцію) зупиняються системою.
Принаймні, так було 10 років тому, коли я операційні системи в універі здавав :)

А це я трохи інакше уявляв.  Дякую що пояснили. Але все ж це не зовсім та інформація яку я шукав, але я здається вже все знайшов в документації на формат ELF.

Подякували: koala1