От Wikipedia:
При вычислении красная зона является областью фиксированного размера в фрейме стека функций за адресом возврата, который не сохраняется этой функцией. Функция callle может использовать красную зону для хранения локальных переменных без дополнительных накладных расходов при изменении указателя стека. Эта область памяти не должна изменяться обработчиками прерываний/исключений/сигналов. Атрибут x86-64 ABI, используемый системой V, предусматривает 128-байтовую красную зону, которая начинается с после адреса возврата и включает аргументы функции. Инструментальная цепочка OpenRISC предполагает 128-байтовую красную зону.
128-байтная область за пределами местоположения, на которую указывает% rsp, считается зарезервированы и не должны быть изменены обработчиками сигналов или прерываний. Поэтому функции могут использовать эту область для временных данных, которые не нужны для вызовов функций. В частности, функции листьев могут использовать эту область для всего кадра стека, а не корректировать указатель стека в прологе и эпилоге. Эта область называется красной зоной.
-
С учетом этих двух котировок красная зона выше уложенного обратного адреса или ниже уложенного обратного адреса?
-
Поскольку эта красная зона относится к
RSP
, она перемещается вниз с каждымpush
и движется вверх с каждымpop
?