x86-64上的红色区域到底是其中



来自Wikipedia:

在计算中,红色区域是函数堆栈框架中的固定区域,而不是该函数保留的返回地址。Callee功能可以使用红色区域来存储本地变量,而无需修改堆栈指针的额外开销。该内存区域不应通过中断/异常/信号处理程序进行修改。System V使用的X86-64 ABI授权一个128字节的红色区域,该区域在返回地址之后直接开始,并包括该函数的参数。OpenRISC工具链假设一个字节红色区域。

来自系统v x86-64 abi:

超出位置的128个字节区域被认为是%RSP 保留,不得通过信号或中断处理程序进行修改。因此,功能可以将此领域用于跨函数调用中不需要的临时数据。特别是,叶子功能可以将此区域用于整个堆栈框架,而不是调整序言和结语中的堆栈指针。该区域称为红色区域。

  • 给定这两个引号,是 red> 上面的堆叠的返回地址还是 堆叠的返回地址?

  • 由于此红色区域是相对于RSP的,它是否使用每个push向下移动,并且每个pop

  • 是否向上移动?

给定这两个引号,是堆叠的返回地址上方的红色区域还是堆叠的返回地址?

红色区域是rsp以下的128个字节,即rsp - 128rsp - 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 等),红色区域的位置。。>

相关内容

  • 没有找到相关文章

最新更新