如何在堆栈中移动项目?
(伪代码,因为内部代码和推送寄存器会有所不同。)
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
所以堆栈看起来像这样:
(顶部)
(返回值)
(寄存器)
(寄存器)
...
(寄存器)
我想让它看起来像这样:
(顶部)
(返回值)
然后让寄存器从堆栈中获取它们的值。这是可能吗?我想用天然气做。可以这样做吗?提前谢谢。
答案 0 :(得分:0)
如果我理解正确,你想在堆栈上的寄存器之前放一个返回值(你得到......?),然后弹出寄存器,但保留返回值?
我可以给出的一个建议是首先为堆栈上的返回值腾出空间(如subl $4, %esp
,以防返回值为4个字节),然后将返回值放在那里,而不是在堆栈。
另一个建议(可能更容易实现)是在.data
部分用.skip
创建一些空间,在那里移动返回值,然后在恢复寄存器后将其移回堆栈。
很难给你一个具体的例子,因为我对这个场景一无所知。