Зачем нам нужно выделение стека, когда у нас красная зона?
У меня есть следующие сомнения:
Как мы знаем, System V x86-64 ABI дает нам область фиксированного размера (128 байт) в кадре стека, так называемую красную зону. Таким образом, в результате нам не нужно использовать, например,sub rsp, 12
, Просто сделайmov [rsp-12], X
и это все.
Но я не могу понять идею этого. Почему это имеет значение? Нужно лиsub rsp, 12
без красной зоны? В конце концов, размер стека ограничен в начале, так почемуsub rsp, 12
это важно? Я знаю, что это позволяет нам следовать за вершиной стека, но давайте проигнорируем это в тот момент.
Я знаю, что используют некоторые инструкцииrsp
значение (какret
) но не волнует это в тот момент.
Суть проблемы в том, что у нас нет красной зоны, и мы сделали:
function:
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
ret
Это разница с?
function:
sub rsp, 1024
mov [rsp-16], rcx
mov [rsp-32], rcx
mov [rsp-128], rcx
mov [rsp-1024], rcx
add rsp, 1024
ret