Dynamic-link library
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.]
- Microsoft specification for dll files
- 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.]