来自Wikipedia:
在计算中,红色区域是函数堆栈框架中的固定区域,而不是该函数保留的返回地址。Callee功能可以使用红色区域来存储本地变量,而无需修改堆栈指针的额外开销。该内存区域不应通过中断/异常/信号处理程序进行修改。System V使用的X86-64 ABI授权一个128字节的红色区域,该区域在返回地址之后直接开始,并包括该函数的参数。OpenRISC工具链假设一个字节红色区域。
来自系统v x86-64 abi:
超出位置的128个字节区域被认为是%RSP 保留,不得通过信号或中断处理程序进行修改。因此,功能可以将此领域用于跨函数调用中不需要的临时数据。特别是,叶子功能可以将此区域用于整个堆栈框架,而不是调整序言和结语中的堆栈指针。该区域称为红色区域。
-
给定这两个引号,是 red> 上面的堆叠的返回地址还是 堆叠的返回地址?
-
由于此红色区域是相对于
RSP
的,它是否使用每个push
向下移动,并且每个pop
?
是否向上移动?
给定这两个引号,是堆叠的返回地址上方的红色区域还是堆叠的返回地址?
红色区域是rsp
以下的128个字节,即rsp - 128
到rsp - 1
。
由于此红色区域相对于RSP,因此每次推动都会向下移动,并且每个POP都向上移动吗?
是。
关于 red>红色区域的Wikipedia文章是错误的,因此产生了歧义。
我在2017年4月修改了该文章以解决该问题。在此更新时
在计算中,红色区域是函数堆栈框架中当前堆栈指针超出该功能的固定区域。Callee功能可以使用红色区域来存储本地变量,而无需修改堆栈指针的额外开销。该内存区域不应通过中断/异常/信号处理程序进行修改。System V使用的X86-64 ABI授权一个128字节的红色区域,直接从堆栈指针的当前值开始。OpenRISC工具链假定一个128字节的红色区域
这使Wikipedia文章与64位系统v ABI定义有关。关于上述歧义的问题,关于以下问题:
由于此红色区域相对于RSP,因此每次推动都会向下移动,并且每个POP都向上移动吗?
红色区域始终是 rsp 下方的128个字节。如 rsp 更改(通过 push/pop/mov 等),红色区域的位置。。>