DLL (англ. Dynamic-link library — динамічно приєднувана бібліотека) — реалізовані компанією Microsoft загальні бібліотеки в ОС Windows та OS/2. Як правило, бібліотеки мають розширення файлу *.dll, *.ocx (для бібліотек, що містять елементи керування ActiveX) або *.drv (драйвери старих версій ОС). Структура DLL така сама, як і в PE-файлів (Portable Executable[en]) для 32-, 64-розрядних Windows, та New Executable[en] (NE) для 16-бітових Windows. DLL може містити код, дані та ресурси в будь-якій комбінації.
Популярний вступ ред.
Різні програми багатовіконного середовища часто виконують однакові дії, наприклад, хрестик в правому верхньому куті вікна, який закриває його, малюється більшістю програм однаково. Марнотратно було б, щоб кожна із цих програм мала відповідну функцію — це роздувало б їхні розміри. Тому, розумно, щоб такі функції поступали в спільне користування. Для цього служать бібліотеки з динамічним зв'язуванням. Відповідні функції завантажуються в пам'ять комп'ютера не з файлу програми, а зі спеціального файлу, вже при виконанні. Насправді, операційна система не завантажує їх повторно. Якщо програма при запуску вимагає завантаження динамічної бібліотеки, то операційна система перевіряє, чи така бібліотека вже є в оперативній пам'яті. Якщо вона є, то операційна система збільшує лічильник клієнтів для динамічної бібліотеки на одиницю. При завершенні роботи, програма повідомляє операційну систему про необхідність вивантажити динамічну бібліотеку. При цьому операційна система зменшує лічильник клієнтів на одиницю. Якщо після такого зменшення кількість клієнтів стає рівною нулю, то тоді динамічна бібліотека справді вивантажується із оперативної пам'яті комп'ютера.
Під Windows динамічні бібліотеки зберігаються в файлах із розширенням *.dll. Крім підпрограм там можуть також зберігатися інші ресурси, наприклад, іконки чи бітмапи. В коді програми, що використовує функції з динамічної бібліотеки, завантаження та вивантаження бібліотеки повинні бути прописані безпосередньо. Компілятору не потрібен код функцій, що містяться в динамічних бібліотеках. При запуску програми, вона, однак, шукатиме відповідну dll. Якщо така dll не знайдена на комп'ютері, то програма здебільшого виконуватися не буде, а видасть повідомлення про відсутність динамічної бібліотеки.
Джерела ред.
- dllexport, dllimport[недоступне посилання з лютого 2019] on MSDN
- Dynamic-Link Libraries [ 9 січня 2017 у Wayback Machine.] on MSDN
- Dynamic-Link Library Security [ 28 травня 2017 у Wayback Machine.] on MSDN
- Dynamic-Link Library Search Order [ 27 серпня 2016 у Wayback Machine.] on MSDN
- Microsoft Security Advisory: Insecure library loading could allow remote code execution [ 15 жовтня 2016 у Wayback Machine.]
- What is a DLL? [ 23 серпня 2016 у Wayback Machine.] on Microsoft support site
- Dynamic-Link Library Functions [ 4 березня 2016 у Wayback Machine.] on MSDN
- Microsoft Portable Executable and Common Object File Format Specification [ 8 грудня 2008 у Wayback Machine.]
- Carpet Bombing and Directory Poisoning [ 26 серпня 2016 у Wayback Machine.]
- MS09-014: Addressing the Safari Carpet Bomb vulnerability [ 5 січня 2016 у Wayback Machine.]
- More information about the DLL Preloading remote attack vector [ 1 січня 2016 у Wayback Machine.]
- An update on the DLL-preloading remote attack vector [ 5 січня 2016 у Wayback Machine.]
- Load Library Safely [ 5 січня 2016 у Wayback Machine.]