好的,所以这是交易。根据我的理解,你可以用汇编中的堆栈来做这样的事情:
push 5
push 6
好的,现在我们在堆栈上:6 5
所以
pop eax
将6放入eax正确吗?但是,如果我们希望在6或5之前将5或某些值压入堆栈,我们将如何抓住它? (没有弹出顶部值)
我看了这个:How does the stack work in assembly language? 而且似乎你无法根据汇编中的堆栈中的地址访问内容。然而,这对我来说似乎没有多大意义。或者有没有办法迭代堆栈而不会“弹出”顶部的东西。谢谢,抱歉“愚蠢”的问题!
答案 0 :(得分:1)
堆栈就像其他任何内存一样。 ESP寄存器指向堆栈的当前顶部(堆栈在内存中向下增长,因此push
指令将减少 ESP寄存器。)
您可以通过从寄存器索引来访问堆栈上的特定值:
mov ebp,esp
mov eax,[ebp+4]
(如果我没记错的话,你不能直接使用ESP的偏移寻址模式,但你可以使用EBP。)
答案 1 :(得分:0)
堆栈指针(由push
和pop
操纵)只是一个寄存器; esp
。您可以偏移该寄存器以访问相对于当前堆栈顶部的内容。