【问题标题】:Control Flow: %rsp and return address and space provided within stack控制流:%rsp 以及堆栈内提供的返回地址和空间
【发布时间】:2018-05-22 18:39:01
【问题描述】:

据说堆栈增加了 8 个字节,而%rsp 被递减,以便为下一条指令调用的返回地址腾出空间。

我的问题是:
这个返回地址是否占用了全部 8 个(字节)?也就是说,这8个位置是否都被返回地址占用了?或者不占用所提供的全部 8 个字节,在这种情况下,下一个被压入堆栈的东西可以在这 8 个字节的空间内被压入(返回地址离开的地方)?

【问题讨论】:

    标签: c x86-64


    【解决方案1】:

    它占用了所有 8 个字节。 %rsp 将减少 8 个字节。

    【讨论】:

    • 在这个例子中,返回地址不是只占3个字节吗(因为两个十六进制数字= 1个字节)
    • 确实如此。但是会推送 5 00 个字节
    • 如果返回地址是动态大小的,从函数返回就困难得多。我们必须“记住”大小是没有任何意义的。 call 和 return 是机器代码指令,所以它们必须非常简单。
    • @LuisOng 但是处理器如何知道返回地址要弹出多少字节?它必须是一个固定的数量,并且它的大小必须根据处理器与 2、4、8 等对齐。
    • 那么如果所有 8 个位置都被占用并且返回地址只有 3 个字节要存储,那么堆栈会是什么样子?
    猜你喜欢
    • 2014-04-21
    • 2015-03-11
    • 1970-01-01
    • 2017-02-24
    • 2023-03-20
    • 1970-01-01
    • 2020-09-23
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多