Красная зона (вычисления)
В вычислениях красная зона функции — это область фиксированного размера в кадре стека ниже (для стека с понижением) текущего указателя стека , который зарезервирован и безопасен для использования. Чаще всего он используется в конечных функциях (функциях, которые не вызывают другие функции) для выделения дополнительной памяти стека без перемещения указателя стека, что сохраняет инструкцию.
Наличие красной зоны зависит от соглашения о вызовах . В системах x86-64 , использующих System V AMD64 ABI (включая Linux и macOS ), используется 128-байтовая красная зона, которая начинается непосредственно под текущим значением указателя стека. [1] [2] OpenRISC предполагает Инструментальная цепочка наличие красной зоны размером 128 байт. [3] В Microsoft Windows нет понятия красной зоны на x86 . [4] Фактически, ABI явно заявляет, что память за пределами указателя стека является энергозависимой и может быть перезаписана отладчиками или обработчиками прерываний. [5] [6] Однако в Microsoft Windows есть красная зона размером 16 байт на IA-64 , 8 байт на AArch32 и 16 байт на AArch64 . [6]
Красная зона защищена от модификации обработчиками прерываний / исключений / сигналов .
Примечания и ссылки
[ редактировать ]- ^ Майкл Матц; Ян Губичка; Андреас Йегер; и др., ред. (28 января 2018 г.). «Двоичный интерфейс приложения System V: дополнение к процессору архитектуры AMD64 (с моделями программирования LP64 и ILP32), версия 1.0» (PDF) . 1.0.
- ^ «Параметры i386 и x86-64 — использование коллекции компиляторов GNU (GCC)» . Проверено 10 апреля 2011 г.
- ^ «OpenCores Wiki — набор инструментов OpenRISC GNU» . Проверено 28 мая 2014 г.
- ^ Туман, Агнер (31 января 2021 г.). Соглашения о вызовах для разных компиляторов и операционных систем C++ (PDF) . Дания. п. 20 . Проверено 11 июля 2021 г.
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Бендерский, Эли (6 сентября 2011 г.). «Разметка фрейма стека на x86-64» . Сайт Эли Бендерского . Проверено 11 июля 2021 г.
- ^ Перейти обратно: а б Чен, Рэймонд (11 января 2019 г.). «Зачем нам вообще нужно определять красную зону? Разве я не могу просто использовать свой стек для чего-нибудь?» . Старая новая вещь . Проверено 11 июля 2021 г.