Красная зона (вычислительная техника)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В вычислительной технике красная зона — это область фиксированного размера в стековом кадре функции ниже (для выталкивающего стека) текущего указателя стека, которая зарезервирована и безопасна для использования. Чаще всего она используется в листовых функциях (функциях, которые не вызывают другие функции) для выделения дополнительной памяти стека без перемещения указателя стека, что сохраняет инструкцию.

Наличие красной зоны зависит от соглашений о вызовах. Системы x86-64, использующие System V AMD64 ABI (включая Linux и macOS), используют 128-байтовую красную зону, которая начинается непосредственно под текущим значением указателя стека.[1][2] OpenRISC toolchain предполагает 128-байтовую красную зону.[3] Microsoft Windows не имеет концепции красной зоны на x86.[4] Однако Microsoft Windows имеет красную зону в 16 байтов на IA-64, 8 байтов на AArch32 и 16 байтов на AArch64.[5] ABI прямо указывает, что память за указателем стека является энергозависимой и может быть перезаписана отладчиками или обработчиками прерываний.[6][5]

Красная зона защищена от модификации обработчиками прерываний, исключений и сигналов.

Примечания[править | править код]

  1. System V Application Binary Interface: AMD64 Architecture Processor Supplement (With LP64 and ILP32 Programming Models) Version 1.0 (28 января 2018).
  2. i386 and x86-64 Options - Using the GNU Compiler Collection (GCC). Дата обращения: 10 апреля 2011. Архивировано 27 августа 2011 года.
  3. OpenCores Wiki - OpenRISC GNU toolchain. Дата обращения: 28 мая 2014. Архивировано 28 мая 2014 года.
  4. Fog, Agner. Calling conventions for different C++ compilers and operating systems. — Denmark, 2021-01-31. — P. 20. Источник. Дата обращения: 27 января 2022. Архивировано 27 января 2022 года.
  5. 1 2 Chen, Raymond Why do we even need to define a red zone? Can't I just use my stack for anything? The Old New Thing (11 января 2019). Дата обращения: 11 июля 2021. Архивировано 11 июля 2021 года.
  6. Bendersky, Eli Stack frame layout on x86-64. Eli Bendersky's website (6 сентября 2011). Дата обращения: 11 июля 2021. Архивировано 2 июля 2021 года.