Урок 13: Виртуальное адресное пространство
Каждый процесс Linux видит своё собственное виртуальное адресное пространство — иллюзию приватной памяти. Этот урок объясняет структуру VAS (text/data/heap/stack/mmap), показывает, как читать /proc/self/maps, и объясняет, почему ASLR важна для безопасности.
Виртуальное адресное пространство — это как дом из чисел: каждый процесс думает, что у него огромный дом в единоличном владении, но ОС транслирует эти числа в реальные физические адреса.
- виртуальное адресное пространство (VAS)
- Приватное адресное пространство, которое получает каждый процесс. Виртуальные адреса транслируются в физические с помощью MMU.
- стек (stack)
- Область памяти, которая растёт вниз (в сторону меньших адресов). Содержит локальные переменные, адреса возврата и кадры функций. Ограничена по размеру.
- куча (heap)
- Область динамической памяти, которая растёт вверх. Управляется malloc/new. Требует явного освобождения или сборки мусора.
- область mmap
- Область, создаваемая системным вызовом mmap() — содержит общие библиотеки (.so), отображённые в память файлы и анонимные отображения.
- ASLR
- Address Space Layout Randomisation — ОС рандомизирует адреса загрузки stack/heap/mmap при каждом запуске, чтобы усложнить эксплуатацию уязвимостей.