Источник: vDSO
vDSO (virtual dynamic shared object — виртуальный динамически подключаемый разделяемый объект) — механизм ядра, экспортирующий тщательно отобранный набор процедур пространства ядра в приложения пользовательского пространства, чтобы приложения могли вызывать эти процедуры ядра внутри собственного процесса — без накладных расходов на переключение режима с пользовательского на режим ядра, присущих вызову тех же процедур через интерфейс системных вызовов[1][2].
vDSO использует стандартные механизмы линковки и загрузки, то есть стандартный формат ELF (Executable and Linkable Format)[3][4]. vDSO — область памяти, выделяемая в пользовательском пространстве, которая открывает доступ к части функциональности ядра. vDSO выделяется динамически, обеспечивает повышенную безопасность за счёт рандомизации адресного пространства и поддерживает более четырёх системных вызовов. Некоторые стандартные библиотеки C, как, например, glibc, могут предоставлять ссылки vDSO так, что если ядро не поддерживает vDSO, выполняется обычный системный вызов[5]. vDSO помогает снизить накладные расходы вызова простых процедур ядра, а также может служить способом выбора оптимального метода системного вызова на некоторых архитектурах, например IA-32[6]. Преимущество перед другими методами в том, что такие экспортируемые процедуры могут предоставлять корректную отладочную информацию DWARF. Реализация обычно предполагает хуки в динамическом компоновщике для поиска vDSO.
vDSO был разработан, чтобы предоставить возможности vsyscall, преодолев его ограничения: небольшой объём статически выделенной памяти, допускающий лишь четыре системных вызова, и одинаковые адреса двоичного интерфейса приложений (ABI) в каждом процессе, что компрометирует безопасность. Проблема безопасности смягчена эмуляцией виртуального системного вызова, но эмуляция вносит дополнительную задержку[5].
В glibc есть поддержка vDSO для getrandom()[7].
- Enrico Perla; Massimiliano Oldani (16 декабря 2016). Kernel Hacking: Exploits verstehen, schreiben und abwehren (нем.). Franzis Verlag. С. 466–. ISBN 978-3-645-20503-0.
- "vDSO — overview of the virtual ELF dynamic shared object". Canonical. Архив оригинала от 4 марта 2016. Проверено 10 декабря 2015.
- "Creating a vDSO: the Colonel's Other Chicken". Linuxjournal.com. Проверено 16 февраля 2015.
- Corbet, Jonathan (8 июня 2011). "On vsyscalls and the vDSO". Lwn.net. Проверено 16 февраля 2015.
- "Community answer to question "What are vDSO and vsyscall?"". Проверено 19 ноября 2016.
- Drysdale, David (16 июля 2014). "Anatomy of a system call, part 2". Lwn.net. Проверено 19 ноября 2018.
- "sourceware.org Git — glibc.git/commit". sourceware.org. Проверено 13 ноября 2024.