当前位置: 首页 > 知识库问答 >
问题:

x86-64 上的红色区域究竟在哪里?

莘钧
2023-03-14

来自维基百科:

在计算中,红色区域是函数堆栈帧中超出返回地址的固定大小的区域,该函数未保留。被调用方函数可以使用红色区域来存储局部变量,而不会产生修改堆栈指针的额外开销。中断/异常/信号处理程序不得修改此内存区域。系统 V 使用的 x86-64 ABI 要求一个 128 字节的红色区域,该区域直接在返回地址之后开始,并包含函数的参数。OpenRISC 工具链采用 128 字节的红色区域。

从System V x86-64 ABI:

%rsp指向的位置之外的128字节区域被认为是保留的,不会被信号或中断处理程序修改。因此,函数可以将此区域用于函数调用之间不需要的临时数据。特别是,叶函数可以将此区域用于其整个堆栈框架,而不是在序言和尾声中调整堆栈指针。这个区域被称为红色区域。

>

  • 给定这两个引号,红色区域是在堆叠返回地址上方还是位于堆叠返回地址下方?

    由于这个红色区域是相对于RSP的,它是否随着每次推动而向下移动,以及它是否随着每次弹出而向上移动?

  • 共有2个答案

    公冶泰
    2023-03-14

    维基百科上关于红区的文章是错误的,从而造成了歧义。

    我在2017年4月修改了这篇文章,以解决这个问题。截至那次更新,维基百科的文章内容如下:

    在计算中,红色区域是函数堆栈帧中超出当前堆栈指针的固定大小区域,该函数不保留该指针。被调用函数可以使用红色区域存储局部变量,而无需修改堆栈指针的额外开销。该内存区域不能被中断/异常/信号处理程序修改。SystemV使用的x86-64ABI要求使用128字节的红色区域,该区域直接从堆栈指针的当前值开始。OpenRISC工具链假定128字节的红色区域

    这使得维基百科条目更符合 64 位系统 V ABI 的定义。解决了上述歧义,关于这个问题:

    由于这个红色区域是相对于RSP的,它是否随着每次推动而向下移动,以及它是否随着每次弹出而向上移动?

    红色区域始终是 RSP 正下方的 128 个字节。随着 RSP 的变化(通过推送/流行/移动网络等),红色区域的位置也会发生变化。

    经博延
    2023-03-14

    给定这两个引号,红色区域是堆叠退货地址上方还是堆叠退货地址下方?

    红色区域是低于rsp的128字节,即rsp-128to

    由于这个红色区域是相对于RSP的,它是否随着每次推动而向下移动,以及它是否随着每次弹出而向上移动?

    是的。

     类似资料:
    • 同样一个1000w的表,都有业务字段所索引 为什么oracle查起来很轻松,mysql就建议分库分表了。 是索引实现的区别导致的吗?还有底层IO读取的优化上的区别?还有哪些区别? 网上查的资料,讲的都太虚了,没讲到本质上

    • 本文向大家介绍探究iOS多线程究竟不安全在哪里?,包括了探究iOS多线程究竟不安全在哪里?的使用技巧和注意事项,需要的朋友参考一下 前言 共享状态,多线程共同访问某个对象的property,在iOS编程里是很普遍的使用场景,我们就从Property的多线程安全说起。 Property 当我们讨论property多线程安全的时候,很多人都知道给property加上atomic attribute之后

    • 问题1:然后我设置img1 是top img2 是bottom为啥最后文字是在上面的 然后我改了 img1 为bottom img2为top 文字就下来了 这个文字究竟是在哪 当然还有其他的middle等现象,我也是无法解释的

    • x86-64 System V ABI(除Windows外的所有系统都使用)以前在http://x86-64.org/documentation/ABI.pdf上运行,但现在该站点已从Internet上消失。 文件有没有新的权威归宿?

    • 问题内容: 假设我有一个域,它指向某个IP地址,另一个域,它指向另一个IP地址。从Ajax请求下载的文件可以发送到吗? 现代浏览器如何严格执行同域策略? 问题答案: 对您的问题的简短回答是:否:对于AJAX调用,您只能访问与加载页面时相同的主机名(和端口/方案)。 有两种解决方法:一种是在其中创建一个URL 作为URL 的反向代理。只要主机名匹配,浏览器就不在乎请求的实际位置。如果您已经有一个前端

    • 本文向大家介绍使用opencv识别图像红色区域,并输出红色区域中心点坐标,包括了使用opencv识别图像红色区域,并输出红色区域中心点坐标的使用技巧和注意事项,需要的朋友参考一下 适用小白,大佬勿喷 个人配置:vs2013 ; opencv 3.0 ; 直接上效果图 注意:右下角的水印把中心点挡住了,要仔细看才能看到 下面是代码: 如有不足,望指点! 补充知识:opencv 识别网球 ,或者绿色的