在堆栈中向上移动项目

时间:2015-12-14 06:35:10

标签: stack gas

如何在堆栈中移动项目?

(伪代码,因为内部代码和推送寄存器会有所不同。)

    push registers to stack
    alter the registers
    get return value on top of the stack
    keep the top of the stack but restore the registers

所以堆栈看起来像这样:

(顶部)

(返回值)

(寄存器)

(寄存器)

...

(寄存器)

我想让它看起来像这样:

(顶部)

(返回值)

然后让寄存器从堆栈中获取它们的值。这是可能吗?我想用天然气做。可以这样做吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你想在堆栈上的寄存器之前放一个返回值(你得到......?),然后弹出寄存器,但保留返回值?

我可以给出的一个建议是首先为堆栈上的返回值腾出空间(如subl $4, %esp,以防返回值为4个字节),然后将返回值放在那里,而不是在堆栈。

另一个建议(可能更容易实现)是在.data部分用.skip创建一些空间,在那里移动返回值,然后在恢复寄存器后将其移回堆栈。

很难给你一个具体的例子,因为我对这个场景一无所知。